VKontakte рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдИрдореЗрд▓ рдХрд░реЗрдВ

рд╢реБрдн рджреЛрдкрд╣рд░
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдП рдереЗ рдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдЪрдирд╛ (рд╕рдорд╛рдЪрд╛рд░, рдШреЛрд╖рдгрд╛рдПрдВ, рдЖрджрд┐) VKontakte рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣рд╛рдБ рдкрд╣реБрдБрдЪрдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ (рдХрд╛рдо рдХреЗ рдШрдВрдЯреЛрдВ рдХреЗ рджреМрд░рд╛рди VKontakte рдкрд░ рдмреИрдардирд╛ рдЕрд╢реЛрднрдиреАрдп рд╣реИ!), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЖрдкрдХреЛ рдорддрджрд╛рди рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рдд, рд╕рдореВрд╣ рдХреЗ рдкреГрд╖реНрда рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЕрджреНрднреБрдд рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдБ рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдореЗрдВ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдФрд░ рдХрд╛рдо рдкрд░, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░рдВрддрд░ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ F5 рджрдмрд╛рдПрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЕрдЬрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдпрд╛рд╕ рдирдВрдмрд░ 1: рд╡реАрдХреЗ рдПрдкреАрдЖрдИ


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдИрдорд╛рдирджрд╛рд░ рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╡реАрдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдкрд░, рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдвреВрдВрдврдиреЗ рдореЗрдВ рднреА рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА рдЬреЛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреАред рдареАрдХ рд╣реИ, рдпрд╣ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореБрдЭреЗ рдПрдХ рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рдЖрдпрд╛, рдЕрд░реНрдерд╛рддреН, рдПрдкреАрдЖрдИ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдореВрд╣ рдХреА рджреАрд╡рд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд╣реИ)ред VKontakte рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рдмрдЪрд╛ рдерд╛ред рдПрдХ рддрд░рдл, рдпрд╣ рдмрд╣реБрдд рдХрд╛рдиреВрдиреА рдирд╣реАрдВ рд╣реИ, рджреВрд╕рд░реА рддрд░рдл, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдирдВрдмрд░ 2 рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рд╕реАрдзреЗ рдкреЗрдЬ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛!


рд╕рд╛рдЗрдЯ рдкрд░ рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ

рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдирдкрд┐рд▓рд┐рдм рдФрд░ рдпреВрд░рд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╕рдм рдХреБрдЫ рдЕрджреНрднреБрдд рдФрд░ рдЕрджреНрднреБрдд рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд╕реВрд░рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрдбрд╝реЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ ... рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рджреБрдЦреА рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреАред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЕрджреНрднреБрдд рдореИрдХреЗрдирд╛рдЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд╛рдпрд╛, рдЬрд┐рд╕рдиреЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ, рд╕рддреНрд░ рдФрд░ рдХреБрдХреАрдЬрд╝ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдЖрджрд┐ рдХреЗ рд╕рднреА рдирд┐рд░реНрдмрд╛рдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рдХрд╛рдо рдХрд┐рдпрд╛ ...
рддреЛ, рдорд╢реАрдиреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдореБрдЦреНрдп VK рдкреГрд╖реНрда рдорд┐рд▓рддрд╛ рд╣реИ:
def initVK(): # Browser br = mechanize.Browser() # Cookie Jar cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) # Browser options br.set_handle_equiv(True) br.set_handle_gzip(True) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) # Follows refresh 0 but not hangs on refresh > 0 br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) # Little cheating... br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] br.open('http://vkontakte.ru') br.select_form(nr=0) br.form['email'] = EMAIL br.form['pass'] = PASSWORD br.submit() return br 

рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ vkontakte.ru рдкрд░ рдкрд╣рд▓рд╛ рдлрд╝реЙрд░реНрдо рд╕рд┐рд░реНрдл рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рд╣реИред рдореИрдХреЗрдирд╛рдЗрдЬ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдЗрд╕реЗ рдФрд░ рд╡реЛрдЗрд▓рд╛ рднрд░рддреЗ рд╣реИрдВ, рд╣рдордиреЗ рд╕рд╛рдЗрдЯ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛!
рджреАрд╡рд╛рд░ рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣рдореЗрдВ рд╕рдореВрд╣ рдкреГрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
 def getGroupHTML(br): br.open('http://vkontakte.ru/OUR_GROUP') html = br.response().read() return html 

рдЕрдм рд╣рдо рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдкреНрд░рд╛рдкреНрдд HTML-рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ HTMLParser рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкрд╛рд░реНрд╕рд░ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо HTMLParser рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗред
рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреБрдЫ рдкреИрдЯрд░реНрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ (рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореИрдВрдиреЗ '@ рд╡рд░реНрд╖ 2007' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛)ред
 class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.recording = False self.export_tag = False self.message = unicode('') def handle_starttag(self, tag, attrs): if tag == 'div': for name, value in attrs: if name == 'class' and value == 'wall_text': self.export_tag = True if name == 'class' and value == 'wall_post_text': self.recording = True def handle_endtag(self, tag): if tag == 'div': if self.recording: self.recording = False year = re.compile(PATTERN) if year.match(self.message): message_queue.append(year.sub('', self.message).strip()) self.message = unicode('') if self.export_tag: self.export_tag = False def handle_data(self, data): if self.recording: self.message += unicode(data, 'CP1251') 

рд╕рднреА рдкрд╛рда CP1251 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред Wall_text рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рддреЗрдВ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, wall_post_text - рд╕рдВрджреЗрд╢ рдХреЗ рдкрд╛рда рдХреЗ рд▓рд┐рдПред

рдЕрдм рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕ рдХреЛ рдореЗрд▓ рдкрд░ рд╕рдВрджреЗрд╢ рди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕рдордп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдореЛрдбрд╝ рд▓реЗрдВрдЧреЗред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкрд╛рда рдореЗрдВ рдЕрдиреНрдп рдЯреИрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХред рдЙрдиреНрд╣реЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рджреВрд░ рдХрд░рдХреЗ рдкреНрд░реА-рдХрдЯ рдХрд░рдХреЗ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВред
 import codecs message_queue = [] try: f = codecs.open('/tmp/vk-last-message', 'r', encoding='utf-8') last_message = f.read() f.close() if len(last_message.strip()) == 0 : last_message = PATTERN except: last_message = PATTERN import time browser = initVK() import mymail while True: #print "Getting vk.com pages" html = getGroupHTML(browser) p = MyHTMLParser() p.feed(html) #print message_queue msgSent = 0 for msg in message_queue: if msg == last_message : break #messageForSend = processMsg(msg) print msg mymail.sendMessage(msg) msgSent += 1 if len(message_queue) > 0 and msgSent > 0 and len(last_message.strip()) > 0: last_message = message_queue[0] f = codecs.open('/tmp/vk-last-message', 'w', encoding='utf-8') f.write(last_message) f.close() #print "last message: " + last_message message_queue = [] #print "Sleeping..." time.sleep(60) 

рдореЗрд▓ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛

рдЕрдм рд╣рдо mymail рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░рд╣рд╕реНрдп рдХреЛ рдкреНрд░рдХрдЯ рдХрд░реЗрдВрдЧреЗред
 import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText def sendMessage(text): if len(text) == 0: print "Empty message" return fromaddr = FROM_ADDR toaddrs = LIST_OF_RECEPIENTS #text = 'test message' msg = MIMEMultipart('alternative') msg['Subject'] = "year2007@vkontakte" msg['From'] = fromaddr msg['To'] = toaddrs mime_text = MIMEText(text, 'plain', 'utf-8') msg.attach(mime_text) # Credentials (if needed) username = USER password = PASSWD # The actual mail send server = smtplib.SMTP('SMTP_SERVER:SMTP_PORT') server.starttls() server.login(username,password) server.sendmail(fromaddr, toaddrs, msg.as_string()) server.quit() 

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЛрдбред рдореИрдВрдиреЗ Yandex smtp рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: smtp.yandex.ru ex 87ред рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдпрд╛ рд╣рд╛рд░реНрдбрдХреЛрдб рдПрдХ рдореЗрд▓рд┐рдВрдЧ рдкрддреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдерд╛ред

рдирддреАрдЬрд╛ рдХреНрдпрд╛ рд╣реБрдЖ


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЙрдЯрдкреБрдЯ рдкрд░:
  1. рд╣рдорд╛рд░реЗ рдореЗрд▓ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдЖрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреЛ VKontakte рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рд╕реНрд╡рдпрдВ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  2. рдкреГрд╖реНрда рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЕрдиреБрднрд╡
  3. рдЖрддреНрдо-рд╕рдВрддреБрд╖реНрдЯрд┐ рдФрд░ рдЧреМрд░рд╡

рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИ, рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GUI рдХреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдирд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд▓реЗрдЦрдХ рдХреЗ рдирд╛рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╕рдореВрд╣ рдХреА рдУрд░ рд╕реЗ рд╕рднреА рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛), рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЕрдВрджрд░ рдЯреИрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЗрддрдиреЗ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреГрд╖реНрда рддрд╛рдЬрд╝рд╛ рджрд░ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рднреА рд╕рдорд╛рди, рд╕рднреА рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рддрд┐рдмрдВрдз рд╕реЗ рджрдВрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдпреБрдкреАрдбреАред VKontakte рд╕реЗ Python рддрдХ рдЪрд▓реЗ рдЧрдПред

Source: https://habr.com/ru/post/In129224/


All Articles