рдЕрдЪреНрдЫрд╛ рджрд┐рди, рдкреНрд░рд┐рдп рд╣реЗрдмреНрд░реЛрд╕реЛрд╕рд┐рдЯреАред
рдЖрдЬ рд╢реБрдХреНрд░рд╡рд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд░рд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреНрд╡рд┐рдЯрд░ рдмреЙрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд┐рдЯрд╣рдм рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓
GitHub рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдмрд╛рдХреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЧрд┐рдЯрд╣рдм рдПрдкреАрдЖрдИ рд╡реА 3 рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВред

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдмреНрд░рд╣рд╛рдм рдкрд░ рдЯреНрд╡рд┐рдЯрд░ (
[1] ,
[2] ,
[3] , ...) рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ GitHub рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ред рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рдиреЛрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╢рд╛рд▓ рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред
рдЬреАрдареВрдм рдЖрдкреА
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рддреАрд╕рд░рд╛ рд╣реИ (рдЗрд╕ рд╡рд░реНрд╖ рдЬреВрди рдореЗрдВ рдкрд╣рд▓реЗ рджреЛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ )ред рдЕрдЬрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдХрдо рд╕реЗ рдХрдо рдЫрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВред рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд▓реЗрдЦрди рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЪреБрдирд╛ред рд╕рдмрд╕реЗ рд╕реБрдЦрдж рд▓рдЧ рд░рд╣рд╛ рдерд╛
github3.pyрдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ
рдЯреНрд╡рд┐рдЯрд░ рдХреА рдмрд╣реБрдд рдХрдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ, рдирдП рдЙрд▓реНрд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЯреЛрдХрди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдмрд╛рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рд░рдЦреА рдЧрдИ
рдСрдЙрде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдмрд╕ рдЧрдпрд╛ред
рдмреЙрдЯ рдХрд╛ рд╡рд┐рдХрд╛рд╕
рдпрд╣ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдмреЙрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
- рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ N рд╕реЗрдХрдВрдб рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- рдЙрдирдореЗрдВ рд╕реЗ рдирдП рдЦреЛрдЬреЛ
- рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рдЖрджреЗрд╢ рдмрдирд╛рдПрдВ
- рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

Oauth рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдлрд╝реАрдб рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Twitter.py рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, github.py, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрд╡рдпрдВ рдмреЙрдЯ рд╣реИ, рдФрд░ id.dat рдЕрдВрддрд┐рдо рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдХрд┐рд╕реА рднреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдХрд╛рдо)ред рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП config.py рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
Twitter API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред Dev.twitter.com рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд╝реЙрд░реНрдо рднрд░реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рд╕реЗрдЯрд┐рдВрдЧ" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ "рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ" рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреБрдВрдЬреА ("рд╡рд┐рд╡рд░рдг" рдЯреИрдм рдкрд░ "рдореЗрд░реА рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рдмрдирд╛рдПрдВ" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ) рдФрд░ рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
twitter.py
рдкреВрд░реНрдг рдХреЛрдб рдХреЗ рд▓рд┐рдВрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реЛрдВрдЧреЗ, рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрдВрд╢ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ, рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдПрдВрдЧреЗред
HOME_TIMELINE_URL = 'http://api.twitter.com/1/statuses/home_timeline.json' UPDATE_URL = 'http://api.twitter.com/1/statuses/update.json' MENTIONS_URL = 'http://api.twitter.com/1/statuses/mentions.json' FILENAME = 'id.dat'
рдЯреЗрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
def _get_connection(self): self.connection = http.client.HTTPConnection('twitter.com')
рдФрд░ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ:
oauth_request = oauth.OAuthRequest.from_consumer_and_token( self.consumer, token=self.access_token, http_method='POST', http_url=UPDATE_URL, parameters=params) oauth_request.sign_request(self.signature_method, self.consumer, self.access_token) self.connection.request(oauth_request.http_method, UPDATE_URL, headers=oauth_request.to_header(), body=self._to_query_string(params))
рдФрд░ рдПрдХ рдЙрд▓реНрд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдПрдХ GET рдЕрдиреБрд░реЛрдз:
oauth_request =\ oauth.OAuthRequest.from_consumer_and_token(self.consumer, token=self.access_token, http_method='GET', http_url=MENTIONS_URL, parameters=params) oauth_request.sign_request(self.signature_method, self.consumer, self.access_token) self.connection.request(oauth_request.http_method, MENTIONS_URL + '?' + self._to_query_string(params), headers=oauth_request.to_header())
рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдЪрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
def _save(self, data): path = os.path.dirname(__file__) path = os.path.join(path, FILENAME) log_file = open(path, 'wb') pickle.dump(data, log_file) log_file.close()
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЕрдм рдПрдХ config.py рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ рдФрд░ GitHub рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб (рдпрджрд┐ рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХреЗ рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ:
import twitter secret = twitter.SecretKeys('consumer_key', 'consumer_secret', 'auth_key', 'auth_secret') LOGIN = 'github_login' PASSWORD = 'github_password'
рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
class SecretKeys: keys = {} def __init__(self, consumer_key, consumer_secret, auth_key, auth_secret): self.keys = {'consumer_key': consumer_key, 'consumer_secret': consumer_secret, 'auth_key': auth_key, 'auth_secret': auth_secret}
github.py
рдмреЙрдЯ рд╕реЗ рд╣реА рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд╣ рдирдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧрд╛, рдЙрдирд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдЧрд╛, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
from github3 import login import twitter
рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдВрдЧреЗ:
def get_data(filename): with open(filename, 'rb') as file: return pickle.load(file)
рд╣рдореЗрдВ twitter.py рд╕реЗ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реЗрдЧреА:
list_of_problems = api.get_new_mentions(idx)
рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдирдИ рдЯреАрдо рдмрдирд╛рдПрдВрдЧреЗ:
for problem in list_of_problems: problem = form_problem(problem)
Form_problem () рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреЙрдЯ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВ:
if command in commands: command = commands.index(command) user = problem['user']['screen_name'] return {'command': command, 'user': user, 'params': params}
рдлрд┐рд░ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
def solve(problem, gh): functions = {0: get_last_commit, 1: get_list_of_contributors, 2: get_count_of_open_issues, 3: get_count_of_commits, 4: get_count_of_repos, 5: subscribe_on_commits, 6: help, 7: unsubscribe_from_commits} return functions[problem['command']](gh, problem['params'], problem['user'])
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬреЗрдВ:
api.post_update('@%s %s.' % (problem['user'], result))
рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд░рд╛рдо рджреЗрдВ:
time.sleep(10)
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ GitHub API рдФрд░ github3.py рдкреНрд░рд▓реЗрдЦрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рднрдВрдбрд╛рд░ рдореЗрдВ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдХрд╛ рдЙрддреНрдкрд╛рджрди рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
def get_last_commit(gh, params, user): pattern = 'Last commit in "%s" was "%s" by %s' repository = gh.repository(params[0], params[1]) last_commit = repository.list_commits()[0] return pattern % (repository.name, last_commit.commit.message, last_commit.commit.author.name)
GitHub API рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдПрдХ GET рдЕрдиреБрд░реЛрдз (/ repos /: user /: repo / commits) рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╕рд░реНрд╡рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрди рд╕рднреА рдХрдорд┐рдЯреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдПрдЧрд╛:

рд╢рд╛рдпрдж рдпрд╣ рд╕рдм рд╣реИред рдмреЙрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ config- рдкреВрд░реНрд╡ рднрд░рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ github.py рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред GitToTweet рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
- рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЖрдЦрд┐рд░реА рдХрдореЗрдВрдЯ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ:
get last commit, ,
: get list of contributors, ,
: get count of open issues, ,
: get count of commits, ,
: get count of repos, ,
: subscribe me, ,
: unsubscribe me, ,
github: help
:
get last commit, ,
: get list of contributors, ,
: get count of open issues, ,
: get count of commits, ,
: get count of repos, ,
: subscribe me, ,
: unsubscribe me, ,
github: help
:
@GitToTweet рдХреЛ рдЖрдЦрд┐рд░реА рдХрдорд┐рдЯ, django, django
@% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо% "django" рдореЗрдВ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз "рдлрд┐рдХреНрд╕реНрдб # 18847 рдерд╛ - рд╕реНрдереИрддрд┐рдХ .example.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореАрдбрд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж рдЬреЗрдореА рдХрд░реНрд▓ ...
рд╕рдВрджрд░реНрдн
GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб:
github.com/valzevul/GitToTweet
GitHub API v3 рдкреНрд░рд▓реЗрдЦрди:
developer.github.com
рдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди:
dev.twitter.com/docs
рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдмреЙрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
twitter.com/GitToTweet
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред