此文本来是发在果壳日志的,发表时间是2013年6月26日。现在果壳日志下线了,搬来这里。
注意:
在最新版的 Mathematica 11.3 中这里的代码已无法使用。我尝试把URLFetch
改写成URLExecute
,但并不成功。最后只能不再用Mathematica自带的处理网络请求的函数,而是调用cURL。修改后的代码和这里已经完全不同,请见GitHub.
以下是原文:
(*_*) |
前一段时间无聊,在微博上注册了个马甲与小号(好吧,小号暴露了),又顺手写了一段Mathematica代码,专门用来转发网漫。
这里就说说我是怎么干的吧。
首先,要申请一个微博APP。申请了之后,你就获得了一个access_token。然后就可以用它来发微博了。
发微博要用到新浪微博的API接口。比如说,发不带图片的微博用statuses/update:
URLFetch["https://api.weibo.com/2/statuses/update.json", |
发带图片的微博用statuses/upload。这个比较麻烦,要采用multipart/form-data编码方式。我琢磨了很久才弄明白这个用Mathematica怎么弄。反正代码差不多是这样:
URLFetch["https://api.weibo.com/2/statuses/upload.json", |
(不用UTF8编码的话可能会导致乱码。)
发图片的时候要先导出成PNG或者别的图片格式再导入成二进制形式,还是挺麻烦的。不过如果是网上的图片或者电脑里本来有的图片,就省去了第一步。
(注意:由于2017年7月的微博接口更新,以上方法以不适用,无论发带图片或不带图片的微博都改用statuses/share接口,而且所发的内容有一些奇怪的限制。)
然后是网漫。我是通过网漫RSS来获取网漫。RSS是XML格式,Mathematica可以把XML格式文件导入成Mathematica的树状结构,然后模式匹配什么的用起来还是很方便的。
麻烦就在于有些网漫的RSS在一个叫feeds.feedburner.com的网站上。这个网站被墙了……
如果有好用的翻墙工具的话,这个不是问题。在Mathematica中可以方便地设置代理服务器:
UseInternetProxy[True]; |
读取完了RSS,在发微博的时候可以关掉代理:
UseInternetProxy[False]; |
然后从RSS中读出内容、图片地址、链接、发表日期等信息。我把每次转发漫画时把其中最新的一期的发表日期存在一个叫做webcomics.mx的文件中,以后只转发这个日期之后的漫画,这样就可以做到不重不漏。
下面是转发网漫的完整代码:
(* 请设成脚本所在的目录 *) |
第一次运行之前要先把pubDates
设定成一个空的Association:
pubDates = <||> |
然后,如果用的是Linux,还可以把这段保存在一个Mathematica脚本中,然后用cron定时执行这个脚本,就可以做到自动转发了。
就这样吧。