说来话长,两三年前只是想搞个 Jabber 的 PHP Class,顺便就用上了 Livid 的 v2ex 的山寨 twitter,他起名叫 doing,我觉得这名字挺好,后来,鸭被墙了,我就琢磨着挪到 twitter 上,而且真倒了一部分数据,但我不用 twitter 的原因不是因为墙,是因为当时老看见鲸鱼,而且由于压力过大,twitter 关掉了一部分外围功能,其中就包括 GTalk 机器人,这搞得我严重不爽,因为我只用 GTalk 发,于是就自己写了一个自娱自乐了。地址是 http://plan.soulogic.com/(还有其他原因,如字数限制、以及我喜欢大量摘引一些文字,我希望有更明显的显示上的区分)
前几天在想,可以考虑做个同步,也不是很费事,一看文档,直接用 cURL 就可以发,但唯独一点不能容忍,就是发完后在 twitter.com 看到的附属信息结尾写的是“via API”,凭什么别人用的都是有名的我的就不行啊!看到 FAQ 才明白需要注册个 app,再通过 OAuth 发,才能显示 via app,于是这一天多的时间就耗在这上了。效果参见 http://twitter.com/soulogic/status/13261231824
其实麻烦就麻烦在搞明白整个过程,实现倒都很简单了,我是参考的 TwitterOAuth,把所有 cURL 过程和生成参数的过程输出到日志文件上,才算通了。
把这几行代码放上来的原因,就是为了帮别人更容易看明白整个交互过程,不用找一个完整实现再在所有地方下钩子。
还有个原因是,无论用谁的框架,都需要改一下把走代理加进去的……
把文档说明也放上来吧
PHP for Twitter OAuth 教学演示
注意:要求 PHP 版本 5.3 以上
如果你对 OAuth 还一无所知(就和我前天一样),
希望这份代码可以帮你更快的理解整个交互过程,而且也只是为了这个
如果要找一个完整实现,这个并不合适
可以考虑 http://github.com/abraham/twitteroauth 或者 Zend Framework----------------------------------------------
首先确认你已经注册了 Application
注册地址 http://twitter.com/oauth_clients/new
你会得到 Consumer key 和 Consumer secret
把这两个字符串写到 common.inc.php 相应位置顺便你还可以改下 callback 地址
这个地址只是引导用户访问,Twitter 并不直接访问你的 Web Server
所以在测试阶段直接用内网地址好了,这份代码暴露在公网是很危险的对照 oauth.net 上的图
过程如下:1. 执行 1_start.php,得到 Request Token(步骤 A、B)
2. 带着 Request Token 访问 twitter.com 上页面,得到用户确认
并带着参数跳转到你指定的 2_callback.php 页面(步骤 B、C、D)
3. 2_callback.php 发起请求,用 Request Token 换得 Access Token
(步骤 E、F)
4. 3_work.php 根据 Consumer key/secret 和 Access Token/secret 这四个参数
以用户身份推一条消息(步骤 G)整个 OAuth 的过程就是为了得到不同用户所相对应的 Access Token/secret
把这两个参数存起来后,就可以用 3_work.php 不断发了