- Главная
- Форум
- Программирование
- Программирование на Python
- Ноу хау - от мастеров на заметку » Страница 9
Ноу хау - от мастеров на заметку » Страница 9
-Программирование на Python
#82
2012-05-20T01:51:56Z01:51 20 май 2012
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
#85
2013-04-23T15:21:03Z15:21 23 апр 2013
дабы оживить тему. Часа три бился над тем, как прикрепить файлы на этом сайте, вот что из этого получилось. Пример отправки сообщения в лс юзеру
1 | # -*- coding: utf-8 -*- |
2 | import time |
3 | import os |
4 | import socket |
5 | import random |
6 | import urllib |
7 | import urllib2 |
8 | import mimetypes |
9 | """здесь небольшое дополнение. У меня import mimetypes |
10 | выдавал ошибку, нет модуля posixpath, поэтому строку import posixpath |
11 | я заменил на |
12 | try: |
13 | import posixpath |
14 | except 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 |
25 | def 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 | |
40 | class 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 | |
85 | site = 'https://dimonvideo.ru/' |
86 | login, password = 'dimy44' , '***' # объявить свои). |
87 | cookie = None # либо свои куки. |
88 | |
89 | def 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 | |
110 | def 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 | |
136 | params = [ |
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 | # файлы: |
149 | files = [ |
150 | 'e://2.jpg' , |
151 | 'e://default.zip' |
152 | ] |
153 | page = sendpage(site + 'pm/8/0' , params, files) |
154 | if page is None : |
155 | print 'Ошибка соединения' |
156 | elif page = = 0 : |
157 | print 'Ошибка авторизации' |
158 | else : |
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 | >>> |
- «
- 1
- 2
- --
- 8
- 9
Авторизуйтесь на сайте для написания ответа.