最近在研究用Python做各种类别的机器人。今天分享一个自动发新浪微博的机器人。基本思路其实实现一个简单的自动发布微博机器人并不难。你只需要每天按时找到要发布的素材(一般是爬虫),然后通过微博开放的API接口自动发布。.素材素材我选择了金山词霸的日常英语句子。我们可以抓取网站的相关信息,形成我们的微博素材。http://news.iciba.com/views/dailysentence/WeiboAPI微博为开发者提供了一个开放的平台https://open.weibo.com/当然,我们在使用这个平台之前还是需要注册并创建应用的。比如像我,在创建应用后,还需要设置一个安全域名(后面发微博的时候会用到),在应用信息->基本信息中设置。还需要设置应用回调地址,可以在应用信息->高级信息中设置。当然,我们可以使用别人封装的第三方库来更方便的操作调用微博API。这里我使用了一个名为“weibo”的库,可以直接使用pip安装。pipinstallweibo但是遇到了安装问题,错误如下'gbk'codeccan'tdecodebyte0xaeinposition241:illegalmultibytesequence好像是编码问题,我们可以通过修改源码来避免1.从pypi.org下载weibo库2.然后解压包,修改文件setup.py如下:long_description=open('README.rst',encoding='utf-8').read(),3.分别执行以下命令安装pythonsetup.pybuildpythonsetup.pyinstall此时就可以安装weibo库了。这些都是成功的准备和写作思路。下面看一下具体流程和代码自动发布微博根据微博库的文档,用它来操作微博还是比较容易的。我们只需要在创建微博应用时提供AppKey、AppSecret和应用回调地址信息即可。简单的调用代码如下fromweiboimportClientc=Client('AppKey','AppSecret','https://www.luobodazahui.top',username='username',password='password')c.post('statuses/share',status='哈哈'+安全域名)我们运行代码,如果没有意外的话,我们可以在该账号下的微博中看到刚刚发布的微博。最简单的微博已经发成功了,那么能发带图片的微博吗?让我们试试吧。根据接口statuses/share的文档,我们可以传入pic参数来上传图片。我们传入pic试试参数f=open('4.png','rb')c.post('statuses/share',status='haha'+安全域名,pic=f)f.close()就可以了,可以正常使用发布带有图片的微博既然微博的自动发布已经做好了,我们就来看看如何自动获取微博素材微博素材对于金山词霸的日常语句,我们可以使用如下API获取每日信息http://open.iciba.com/dsapi/可以看到接口返回的信息如下。我们可以直接使用requests库调用接口importrequestsurl='http://open.iciba.com/dsapi/'res=requests。get(url)content_e=res.json()['content']content_c=res.json()['note']content=content_e+'\n'+content_ccontent_t=res.json()['picture2']现在我们封装两个功能,完善功能defweibo(content,picture):ff=requests.get(picture).contentc=Client(app_key,app_secret,'https://www.luobodazahui.top',usernameusername=username,passwordpassword=password)c.post('statuses/share',status=content+'https://www.luobodazahui.com',pic=ff)defauto_weibo():url='http://open.iciba.com/dsapi/'res=requests.get(url)content_e=res.json()['content']content_c=res.json()['note']content=content_e+'\n'+content_ccontent_t=res.json()['picture2']weibo(content,content_t)return'OK'现在我们可以创建一个定时任务,每天7点运行脚本。07***pythonauto_weibo.py最终效果如下今天的分享就到这里,如果觉得有用请点个赞+关注支持
