有了树莓派微博Robot,麻麻再也不用担心我没有粉了!
原帖来自果壳网
“
先挖个坑,慢慢填教程吧,放出我的微博http://weibo.com/u/2769230764
ID:萝卜he芭蕉,欢迎大家来关注
第一步,你得有一个树莓派 第二部,先上照片
温度传感器用的是DS18B20,由于树莓派是工作在linux下,所以无法直接使用C来做驱动,因此我使用的是国外大牛做好的驱动,直接编译进内核
具体方式,进入命令行(通过ssh或者直接连显示器)
输入如下命令
sudo wget http://www.frank-buss.de/raspberrypi/kernel-rpi-w1.tgz
sudo tar -x*** kernel-rpi-w1.tgz
sudo rm -f kernel-rpi-w1.tgz
sudo cd /lib/modules
sudo wget http://www.frank-buss.de/raspberrypi/modules-rpi-w1.tgz
sudo tar -x*** modules-rpi-w1.tgz
sudo rm -f modules-rpi-w1.tgz
sudo sync
sudo reboot 然后等待机器重启重新加载1-wire设备的驱动,也就是给18b20的驱动。 重启完成之后,按图所示连接18B20和树莓派
接下来,在命令行输入
sudo modprobe w1-gpio
sudo modprobe w1-therm
(以上两条命令需要在/etc/rc.loca这个启动脚本里添加,添加的时候去掉sudo,这样可以不用每次启动都要手动加载w1模块了)
ls /sys/bus/w1/devices/w1 bus master
会显示
其中28开头的就是28b20设备了 读取温度则用如下命令
cat /sys/bus/w1/devices/w1 bus master /28-*/w1_slave
t的值就是温度,除以1000就是摄氏度
再接下来就是程序部分了,树莓派是运行在linux下的,同时又带有python的解释器.于是我打算写一个python脚本来登录新浪微博,然后发表状态.网上搜了一圈,对于python实在是无力,看到别人用新浪微博python SDK做的脚本,就是不知道怎么移植过来.万般无奈之下,用了一个别人写的模拟登陆新浪微博的脚本,只修改了里面的账户和密码,当然改成我自己的了,发现居然可以登录.运行脚本,显示 Login success!(晚上公司的路由的动态DNS又挂了,家里没法连上树莓的FTP,脚本文件暂时明天上传)
既然能登陆上去,我就可以干别的事了,比如发个状态. 这里必须要先提到一点,新浪微博的开放平台是一个提供各种接口给各种各样的应用访问微博的地方.我们需要申请一个应用用来获得一个Access Token,这里我选择申请的移动应用开发
然后就是各种填表格申请,完成之后就会有一个access token,但是此时这个access token只是一个测试用途的,你需要逐步完善你的应用,通过审核,否者在后面的提交微博请求的时候,就会一直显示"来自未通过审核应用"
目前我还是这样的
接前面说的,用脚本登陆之后,你需要发微博,这里就要对微博的发状态接口发请求了
http://open.weibo.com/wiki/2/statuses/update
这是新浪微博的发状态接口,从API文档里可以看到,access token参数和内容参数status是必须的
请求参数
因此我构造了一条请求 通过这个请求我可以把任意的内容(少于140个字)发到我的微博状态上去.
(代码的百度网盘地址 http://pan.baidu.com/share/link?shareid=553963&uk=3506924485
下载到树莓派桌面上,按图所示连接好DS18B20即可使用,注意要在moni.py文件中把新浪微博的账号和密码改为自己的) 然后,我需要获取系统当前时间和读我之前接上的温度传感器的数据.这里有两条python的函数,一个是用来获取系统时间并以格式化输出形式显示出来,一个是在python中执行linux的系统命令并获取返回值.(代码明天粘贴上来) 当然,温度传感器的数据需要进行一下处理,取最后的几位,进行一下运算,得到一个1位小数的浮点数 这样,我就可以把时间和温度这两个值,作为status参数通过微博的接口提交到新浪微博了 但是,这样的的脚本运行一次才提交一次,我想要的是定时运行脚本来发微博,这里需要用到linux下的一个计划任务工具cron,具体的使用方法网上非常非常多,这里我就不赘述了,只贴出我的配置就行(同上,明天粘贴) PS:以上代码,完全不需要任何库来支持,将代码中的账号密码和acces token换成自己的,就可以实现登陆和发微博,发的内容可以自己改,没有树莓派和温度传感器的朋友,可以只发个时间,而且可以在其他的python解释器环境下来运行这个脚本.
(作者注:似乎acces token的作用是用来表示请求来源的身份的,也就是说大家也可以用我找个access token来提交,目前还是会显示未通过申请的应用,但是等我的审核通过了,就会显示我这个应用的申请名称<树莓派_微博小派>)
最后,祝各位技术宅们在新春长假期间玩的开心! 最后展示一张效果图
**********************************************************************************************************************************
上面的帖子是模拟浏览器去提交请求,可以做到发普通的微博,但是我一直搞不清发图片微博的POST请求该如何构造,于是我就打算直接采用新浪微博的PYTHON SDK来实现这个功能。 PYTHON的源码: # -*- coding: utf-8 -*-
#from weibopy.api import API
from weibo import APIClient
import sys,os,urllib,urllib2,cookielib,httplib
import webbrowser
import urlparse #模拟授权并且获取回调地址上的code,以获得acces token和token过期的UNIX时间
def get_code():
APP_KEY = 'xxxxxxxxxx' #你申请的APP_KEY
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #你申请的APP_SECRET
#回调地址,可以用这个默认地址
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'
AUTH_URL = 'https://api.weibo.com/oauth2/authorize'
USERID = 'xxxx@xxx.com' #微博账号
PASSWD = 'xxxxxx' #微博密码 client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
referer_url = client.get_authorize_url()
print "referer url is : %s" % referer_url cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
urllib2.install_opener(opener) postdata = {"client_id": APP_KEY,
"redirect_uri": CALLBACK_URL,
"userId": USERID,
"passwd": PASSWD,
"isLoginSina": "0",
"action": "submit",
"response_type": "code",
} headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0",
"Host": "api.weibo.com",
"Referer": referer_url
} req = urllib2.Request(
url = AUTH_URL,
data = urllib.urlencode(postdata),
headers = headers
)
try:
resp = urllib2.urlopen(req)
#print "callback url is : %s" % resp.geturl()
code = resp.geturl()[-32:]
#print "code is : %s" % resp.geturl()[-32:]
except Exception, e:
print e
return code def begin(): APP_KEY = 'xxxxxxxx' # app key
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # app secret
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html' # callback url client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) code = get_code() r = client.request_access_token(code)
print r
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in # token过期的UNIX时间 client.set_access_token(access_token, expires_in) #发普通微博
client.statuses.update.post(status=u'test') #发图片微博
f = open('C:/pic/test.jpg', 'rb')
r = client.statuses.upload.post(status=u'测试OAuth 2.0带图片发微博', pic=f)
f.close() # APIClient不会自动关闭文件,需要手动关闭 begin()
申请了新浪的APP后,自然就会得到APP_KEY和APP_SECRET,填入上面的PYTHON代码中,再填入自己的微博账号密码,最后一点很重要,具体看图所示 之后就可以直接用SDK里的API去干你想干的事了,发图片,发微博还有别的balalbalala,具体可以参考,这是SDK作者的githubhttps://github.com/michaelliao/sinaweibopy/wiki/OAuth2-HOWTO
|