Ноу хау - от мастеров на заметку » Страница 9

-

Программирование на Python



Punk_Joker


репутация: 26
на сайте с 2009 года
сообщений: 64

Nokia N9

Украина

Возраст - 30

#81

dimy44,
Опиши пожалуйста принцип работы.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#82

a ^ b - иcключaющee или. Уcтaнaвливaютcя тoлькo тe биты, кoтopыe ycтaнoвлeны либo тoлькo в a, либo тoлькo в b.
100 ^ 100:
1100100 # 100 в десятичной
1100100 # 100
0000000 # peзyльтaт 0.
0 ^ 100:
0000000 # 0
1100100 # 100
1100100 # peзyльтaт 100.

-------------
добавлено в 00.54: ну, чтоб понятней, 12 ^ 5:
1100 # 12
0101 # 5
1001 # 9
-------------
добавлено в 01.00: ну и разумеется запись x ^= 100 идентична x = x ^ 100

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#83

А мне такой вариант придумался
x = abs(x - 100)
хотя он менее рационален.

Deftrue


репутация:
на сайте с 1970 года
сообщений:

#84

А вы всё питоните)
-------------
добавлено в 22.33: Хм, ещё бы. Битовые операции рациональнее ибо скорость

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#85

дабы оживить тему. Часа три бился над тем, как прикрепить файлы на этом сайте, вот что из этого получилось. Пример отправки сообщения в лс юзеру

1# -*- coding: utf-8 -*-
2import time
3import os
4import socket
5import random
6import urllib
7import urllib2
8import mimetypes
9"""здесь небольшое дополнение. У меня import mimetypes
10выдавал ошибку, нет модуля posixpath, поэтому строку import posixpath
11я заменил на
12try:
13    import posixpath
14except ImportError:
15    class posixpath(object):
16        def splitext(url):
17            index_sep = url.rfind('.')
18            if index_sep == -1: return (url, '')
19            return (url[:index_sep], url[index_sep:])
20        splitext = staticmethod(splitext)
21  
22"""
23  
24_prefix = None
25def choose_boundary():
26    """ разделитель секций для хтмл запроса"""
27    global _prefix
28    if _prefix is None:
29        hostid = socket.gethostbyname(socket.gethostname())
30        try: uid = `os.getuid()`
31        except: uid = '1'
32        try: pid = `os.getpid()`
33        except: pid = '1'
34        _prefix = hostid + '.' + uid + '.' + pid
35    timestamp = '%.3f' % time.time()
36    seed = `random.randint(0, 32767)`
37    return _prefix + '.' + timestamp + '.' + seed
38  
39  
40class MultiPartForm(object):
41    """Форма хтмл запроса"""
42  
43    def __init__(self):
44        self.form_fields = []
45        self.files = []
46        self.boundary = choose_boundary()
47  
48    def get_content_type(self):
49        return 'multipart/form-data; boundary=%s' % self.boundary
50  
51    def add_field(self, name, value):
52        self.form_fields.append((name, value))
53  
54    def add_file(self, fieldname, filename, fileHandle, mimetype=None):
55        body = fileHandle.read()
56        if mimetype is None:
57            mimetype = mimetypes.guess_type(filename)[0] or 'application/ octet-stream'
58        self.files.append((fieldname, filename, mimetype, body))
59  
60    def __str__(self):
61        parts = []
62        part_boundary = '--' + self.boundary
63        # Add the form fields
64        parts.extend(
65            [
66                [part_boundary, 'Content-Disposition: form-data; name="%s"' % name, '', value] for name, value in self.form_fields
67                ]
68            )
69        # Add the files to upload
70        parts.extend(
71            [
72                [
73                    part_boundary, 'Content-Disposition: form-data; name="%s"; filename="%s"' % (field_name, filename),
74                    'Content-Type: %s' % content_type, '', body
75                    ] for field_name, filename, content_type, body in self.files
76                ]
77            )
78        flattened = reduce(lambda a, b: a.extend(b) or a, parts, [])
79        flattened.append('--' + self.boundary + '--')
80        flattened.append('')
81        return '\r\n'.join(flattened)
82  
83"""Пример отправки сообщения в лс на сайте dimonvideo.ru с прикрепленными файлами"""
84  
86login, password = 'dimy44', '***' # объявить свои).
87cookie = None # либо свои куки.
88  
89def set_cookie():
90    """авторизация и получение cookie, если их нет"""
91    global cookie
92    post = urllib.urlencode(
93        {
94            'login_name': login,
95            'login_password': password,
96            'login': 'submit',
97            'auth': '1'
98            }
99        )
100    try:
101        coo = urllib.urlopen(site, post).info()['Set-Cookie'].split()
102    except: # при неудачном соединении.
103        return
104    # парсим куки, извлекая нужное
105    lst = [i for i in coo if i.startswith('dv_password') or i.startswith('dv_user_id')]
106    if len(lst) < 2: return 0 # если авторизация не прошла.
107    cookie = ' '.join(lst)
108    return 1
109  
110def sendpage(link, params, files=None):
111    if not cookie: # если cookie не определены.
112        coo = set_cookie() # то авторизуемся.
113        if not coo: return coo
114    form = MultiPartForm()
115    for name, value in params:
116        form.add_field(name, value)
117    if files:
118        n = 1
119        for f in files:
120            form.add_file('file%s' % n, os.path.split(f)[1], fileHandle=open(f, 'rb'))
121            n += 1
122    request = urllib2.Request(link)
123    request.add_header('Cookie', cookie)
124    body = str(form)
125    request.add_header('Content-type', form.get_content_type())
126    request.add_header('Content- length', str(len(body)))
127    request.add_data(body)
128    try:
129        return urllib2.urlopen(request).read()
130    except Exception, e:
131        # сохр. текст ошибки
132        open('D:\\error_log_func_sendpage.txt', 'wb').write(str(e))
133  
134# отправка:
135     
136params = [
137    ('to', 'dimy44'), # кому
138    ('subj', 'test'), # тема сообщения, необязат.
139    ('a', '8'),
140    ('comments', 'текст сообщения блаблабла'.decode("utf-8").encode("windows-1251")),
141    ('otchet', '0'), # придет ли отчет о прочтении
142    ('outboxcopy', '0'), # сохранять ли в отправленных
143#    ('id', '1559551412'), # на какое сообщение ответ, необязательно
144    ('com', '2'), # приоритет обычный
145    ('quot', '0'), # не цитировать
146    ('submit', 'ok')
147    ]
148# файлы:
149files = [
150    'e://2.jpg',
151    'e://default.zip'
152    ]
153page = sendpage(site+'pm/8/0', params, files)
154if page is None:
155    print 'Ошибка соединения'
156elif page == 0:
157    print 'Ошибка авторизации'
158else:
159    page = page.split('<h4')
160    if len(page) < 2:
161        print '???'
162    else:
163        print page[1].split('>')[1].split('</h')[0].decode("utf8")
164  
165# result:
166>>>
167Сообщение отправлено.
168>>>

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#86

Щас dimonvideo.ru/ изменился на m.dimonvideo.ru/. Это к предыдущему посту.


Яндекс.Метрика