kivantium活動日記

プログラムを使っていろいろやります

Twitterアイコンをリプライ画像に変更するPythonスクリプト

今までTwitterのアイコンには手書きの絵を使っていたのですが、どうも気に入らない人がいたようです。


というわけで質問者さんの気に入る素敵なアイコンを募集しようと思って画像リプされたらアイコンを変更するプログラムを書きました。

Tweepyというライブラリを使っています。(参考: 過去記事

(2020年4月15日追記)User Streams APIが廃止されたためこのコードは現在動きません。**

#!/usr/bin/env python
#-*- coding:utf-8 -*-

# アイコンをリプライされてきた画像に変更する

from tweepy import *
import urllib
import sys
import datetime
from PIL import Image

#Authorization
f = open('config.txt')
data = f.read()
f.close()
lines = data.split('\n')

 #エンコード設定
reload(sys)
sys.setdefaultencoding('utf-8')

def get_oauth():
	consumer_key = lines[0]
	consumer_secret = lines[1]
	access_key = lines[2]
	access_secret = lines[3]
	auth = OAuthHandler(consumer_key, consumer_secret)
	auth.set_access_token(access_key, access_secret)
	return auth

class StreamListener(StreamListener):
    def on_status(self, status):
        if status.in_reply_to_screen_name=='kivantium':
            print status.author.screen_name
            if status.entities.has_key('media') :
                medias = status.entities['media']
                m =  medias[0]
                media_url = m['media_url']
                try:
                    urllib.urlretrieve(media_url, 'icon.jpg')
                except IOError:
                    print "保存に失敗しました"
                now = datetime.datetime.now()
                time = now.strftime("%H:%M:%S")
                message = '@'+status.author.screen_name+' アイコンを変更しました('+time+')'
                message = message.decode("utf-8")
                try:
                    api.update_profile_image('icon.jpg')
                    api.update_status(status=message, in_reply_to_status_id=status.id)
                except TweepError, e:
                    print "error response code: " + str(e.response.status)
                    print "error message: " + str(e.response.reason)

auth = get_oauth()
api = API(auth)
stream = Stream(auth, StreamListener(), secure=True)
print "Start Streaming!"
stream.userstream()

みんなの力で素敵なアイコンになることを期待しています。

広告コーナー