用Python实现从命令行发twitter

比如我在写程序,突然来了个灵感,想发推。这时,停下手头的工作,打开firefox,上twitter.com,选中输入框,输入,tweet。看起来简单,但实际上打断了我写程序的思路,一看到Timeline,就想着往下翻,手头的工作就不要做了。发推应该就跟说话一样简单,不需要那么多步骤。所以,我折腾出了用命令行发推。其实类似的软件或脚本应该有很多,但我觉得我这个还是比较简单的。

从2010年8月31号开始,twitter停止了原先的Basic认证方式,改由OAuth认证。这种认证初看会觉得很复杂,几个token发来发去。简化他有两个办法,第一,官方提供基于OAuth认证的library,各种语言都有,直接拿来用就是;第二,对于单一用户,不用完整实现OAuth功能,官方可以提供最终的access_token。

本文就是基于第二点做的,而且这个方法具有普遍性。很多情况是这样:你在GAE上建了一个gtap来做twitter API,或者GTalk机器人来发推,但实际上,这些服务很有可能只有你自己在使用。这时,你就可以直接从官方获取access_token来进行操作。

1.准备工作

首先你要有一个twitter app,这里有一段文字讲如何注册应用。

https://dev.twitter.com/apps 从这里进入,选择你的应用,记录下Consumer key和Consumer secret。

然后点右边的“My Access Token”,记录下里面的oauth_token和oauth_token_secret。

获得这四个值,你就可以控制你自己的twitter帐号了。

2.获取oauth2库

这是官方推荐的一个OAuth认证库,这里使用easy_install来安装。

如果没有easy_install,请先安装,当然python你肯定要装。

apt-get install python-setuptools

Windows用户可以先去Google搜一个ez_setup.py的脚本,执行后就自动装好了。

装好easy_install后执行:

easy_install oauth2

3.程序代码

点击这里下载程序代码。

01 # -*- coding: utf-8 -*-
02
03 import oauth2 as oauth
04 import urllib
05 import sys
06
07 def oauth_req(url, http_method="GET", post_body=None, http_headers=None):
08     consumer = oauth.Consumer(key="Consumer key", secret="Consumer secret")
09     token = oauth.Token(key="oauth_token", secret="oauth_token_secret")
10     client = oauth.Client(consumer, token)
11
12     resp, content = client.request(
13         url,
14         method=http_method,
15         body=post_body,
16         headers=http_headers
17     )
18     return content
19
20 if len(sys.argv) == 2:
21     #For Windows
22     #a = "status=" + urllib.quote(sys.argv[1].decode('gb2312').encode(‘utf-8’))
23     #For Linux
24     a = "status=" + urllib.quote(sys.argv[1])
25     print "Tweeting…"
26     req = oauth_req(
27     'http://api.twitter.com/1/statuses/update.xml',
28     'POST',
29     a)
30     #print req
31     print "Done."
32 else :
33     print "Error Parameter"

一点解释:Windows下的命令行不是UTF8编码,所以要转换一下。不同系统下请打开相应的代码,并注释掉其他的,然后把上面的四个值替换成从第一步获取的值。

4.使用

在命令行下执行

python t.py "从命令行发推测试"

你如果还嫌前面的python麻烦,那就写个shell脚本替代吧。如果你还问为什么没有看TL、fo人、RT功能。我做这个东西的目的就是在不打断思路的前提下去发个推,仅此而已。如果你都想到了要RT某某推,那还是去官网或者其他客户端吧,这时你已经没心思在手头工作上了,就谈不上不打断思路。

UPDATE.1(2011/3/21):可以在/usr/bin中放入刚才的python脚本,这样就跟执行命令一样。
在脚本最开头加入(具体python路径请自行修改)
#!/usr/bin/python2.6
然后复制脚本到/usr/bin中,并赋予执行权限
cp t.py /usr/bin/tweet
chmod +x /usr/bin/tweet

现在就可以在命令行中的任意路径里输入如下命令发推:
tweet "Tweet From CLI!"

5.参考资料

Authenticating Requests with OAuth

Using one access token with OAuth

Linux, Programming , , ,

16 comments


  1. Pingback: 用Python实现从命令行发twitter « 细节的力量

  2. Pingback: Mr.Wayne » Blog Archive » 用Python实现从命令行发twitter

  3. Pingback: 快速上传截图到flickr并发送twitter | Digital Base

Leave a Reply

Your email address will not be published. Required fields are marked *