рдЧрд┐рдЯрд╣рдм рдПрдкреАрдЖрдИ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЯреНрд╡рд┐рдЯрд░ рдмреЙрдЯ рд▓рд┐рдЦрдирд╛

рдЕрдЪреНрдЫрд╛ рджрд┐рди, рдкреНрд░рд┐рдп рд╣реЗрдмреНрд░реЛрд╕реЛрд╕рд┐рдЯреАред

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

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




рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдмреНрд░рд╣рд╛рдм рдкрд░ рдЯреНрд╡рд┐рдЯрд░ ( [1] , [2] , [3] , ...) рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ GitHub рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ред рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕ рдиреЛрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╢рд╛рд▓ рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

рдЬреАрдареВрдм рдЖрдкреА

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рддреАрд╕рд░рд╛ рд╣реИ (рдЗрд╕ рд╡рд░реНрд╖ рдЬреВрди рдореЗрдВ рдкрд╣рд▓реЗ рджреЛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ )ред рдЕрдЬрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдЫрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВред рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд▓реЗрдЦрди рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЪреБрдирд╛ред рд╕рдмрд╕реЗ рд╕реБрдЦрдж рд▓рдЧ рд░рд╣рд╛ рдерд╛ github3.py

рдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ

рдЯреНрд╡рд┐рдЯрд░ рдХреА рдмрд╣реБрдд рдХрдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ, рдирдП рдЙрд▓реНрд▓реЗрдЦ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЯреЛрдХрди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдмрд╛рд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рд░рдЦреА рдЧрдИ рдСрдЙрде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдмрд╕ рдЧрдпрд╛ред

рдмреЙрдЯ рдХрд╛ рд╡рд┐рдХрд╛рд╕

рдпрд╣ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдмреЙрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


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' # File with the number of the last solved problem 

рдЯреЗрдк рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
 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 # twitter.py import time import os import pickle from config import secret, LOGIN, PASSWORD 

рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдВрдЧреЗ:
 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 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрди рдЖрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

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


All Articles