#! /usr/local/bin/python3.7"""date name version2017.11.10 mk-mode.com 1.00 新規作成2018.08.05 mk-mode.com 1.01 画像ツイート昨日を追加Copyright(C) 2017-2018 mk-mode.com All Rights Reserved."""fromrequests_oauthlibimportOAuth1SessionimportjsonimportsysimporttracebackimportyamlclassTweet:""" Tweet class """YML="twitter.yml"URL_UPD="https://api.twitter.com/1.1/statuses/update.json"URL_MEDIA="https://upload.twitter.com/1.1/media/upload.json"def__init__(self):self.ac=sys.argv[1]self.text=sys.argv[2].replace("\\n","\n")self.media_paths=sys.argv[3:]iflen(sys.argv)>3else[]withopen(self.YML)asf:self.yml=yaml.load(f)defexec(self):""" Execution """try:ifnot(self.acinself.yml):print("'{}' could not be found!".format(self.ac))sys.exit(0)print("[{}]".format(self.ac,self.text))status_code,res_json=self.__tweet()ifstatus_code==200:print("TWEET-ID:",res_json["id_str"])else:print("!ERROR! STATUS-CODE: ",status_code)exceptExceptionase:raisedef__tweet(self):""" Tweet """try:oa=OAuth1Session(self.yml[self.ac]["cons_key"],self.yml[self.ac]["cons_sec"],self.yml[self.ac]["accs_key"],self.yml[self.ac]["accs_sec"])ifself.media_paths==[]:res=oa.post(self.URL_UPD,params={"status":self.text})else:media_ids=[]forminself.media_paths:files={"media":open(m,'rb')}res_m=oa.post(self.URL_MEDIA,files=files)ifres_m.status_code!=200:return[res_m.status_code,json.loads(res_m.text)]media_ids.append(json.loads(res_m.text)["media_id_string"])res=oa.post(self.URL_UPD,params={"status":self.text,"media_ids":",".join(media_ids)})return[res.status_code,json.loads(res.text)]exceptExceptionase:raiseif__name__=='__main__':iflen(sys.argv)<3:print("USAGE: ./tweet.py SCREEN-NAME TWEET-TEXT [MEDIA-PATH ...]")sys.exit(0)try:Tweet().exec()exceptExceptionase:traceback.print_exc()sys.exit(1)