在Twitter上关注了几个图片账号, 比如@HistoryInPix, 经常想把一些有趣的图文转发到微博, 但操作起来却麻烦. 闲来无聊, 就做了个小机器人来自动把感兴趣的账号发的推全部转发到微博的某个账号(@图中看史)里, 这样在微博里就可以关注和转发了. 简单记录一下过程.
Open source: GitHub: twitter2weibo
首先, 在Twitter和微博的开发平台上注册成为开发者, 并分别创建应用.
Twitter上很简单, 创建即生效, 直接拿到四个值: consumer_key
, consumer_secret
, access_token
, access_token_secret
.
微博上就有点麻烦, 因为需要官方审核. 因此需要做一个简单网页, 放上微博组件, 审核通过后才可以让第三方账号(开发者之外的账号)使用.
在微博开发平台的”基本信息”里, 得到App Key
和App Secret
. 在”高级信息”的授权回调页可以填: http://127.0.0.1/callback
.
接下来, 可以在iPython里顺序执行下面一次性授权工作, 得到token
:
from weibo import Client
REDIRECT_URI = "http://127.0.0.1/callback"
c = Client(API_KEY, API_SECRET, REDIRECT_URI)
c.authorize_url
在浏览器打开授权页, 在地址栏里拷贝得到code
.
code = 'xxxxxxxxx'
c.set_code(code)
print(c.token)
得到token
后便可以保存到script中以供使用.
然后还需要注册一个微博”接收账号”, 用于发布微博.
使用第三方库tweepy
和weibo
, 来分别调用Twitter和微博的API.
pip install tweepy weibo
基本流程: 从多个关注的Twitter账号抓取新的推文及图片, 然后发到微博账号.
建立一个appcofig.py
私有文件, 存放Twitter和微博应用的key
, secret
等参数.
使用pickle存储每个Twitter账号最后转发的tweet的时间.
在VPS上, 使用Cron来做即可.
sudo crontab -e
添加任务:
10 * * * * python /home/herrkaefer/twitter2weibo/twitter2weibo.py >> /home/herrkaefer/twitter2weibo/log.txt
含义是每小时的10分执行一次, 并log到文件中.
在本次执行时, 应该检测脚本是否已经在执行中, 如果已经在执行则退出. 为了实现这一点, 可借用一个临时文件来判断. 在每次执行前:
pidfile = "/tmp/twitter2weibo.pid"
if os.path.isfile(pidfile):
sys.exit()
file(pidfile, 'w').write(str(os.getpid()))
正常执行后:
os.unlink(pidfile)
sys.exit()
Last modified: 2018-03-15