美文网首页
怎样从饭否抓数据?

怎样从饭否抓数据?

作者: Pope怯懦懦地 | 来源:发表于2017-09-29 14:31 被阅读38次

一直有个希望,希望自己写出一款能完整搜索自己的饭否消息的 app 。网页版的搜索倒是可以,但一来不方便,二来没有「主题搜索」功能。算了,这个愿望先放一放吧。先写个脚本把数据抓下来应应急吧。

从饭否抓数据也不是件容易的事,反正我没把 OAuth 搞定。但好在绕开也能抓下来。

饭否提供了 API ,就是一种程序跟网页对话的方式。比如,你给饭否发一条信息[1]

http://api.fanfou.com/statuses/user_timeline.json?id=Sedgewick

饭否就会回应你一个 json 文件📃,里面记录了 Sedgewick 这货最近发的 20 条消息。

下面我们让脚本程序来干这件事。

require 'open-uri'
require 'json'

def grab_statuses(url, pages)
  ary = []
  pages.times do |p|
    resp = open(url + "&page=#{p+1}")
    js = JSON.parse(resp.read)
    js.each { |s| ary << s }
    puts "page #{p+1}"
  end
  
  File.open("./statuses.json", "w") do |file|
    file.write ary
  end
end

url = "http://api.fanfou.com/statuses/user_timeline.json?id=Sedgewick"
grab_statuses(url, 206)

这段脚本会把Sedgewick饭否上前206页的消息都抓下来,写到脚本所在目录下一个叫statuses.json的文件📃里头。


现在,我们看看怎么读取这些数据。

require "json"
require "time"

s = ""

File.open("./statuses.json", "r") do |file|
  s = file.read.gsub("=>", ":").gsub(/\\u\{(\w{5})\}/) { |s|
    [$1.to_i(16)].pack("U")
  }
end

statuses = JSON.parse(s)

statuses.each do |stat|
  p stat["text"]
end

上面这段脚本是把 json 文件📃读取到内存中。里面做了一些处理,以保证 emoji 符号不会变成乱码。然后就可以像 hash 一样查找特定字段了(这里显示的是text字段)。


拿到这些数据,现在能干些什么呢?比如,统计一些你喜欢什么时候发消息:

require "time"

times = []

statuses.each do |stat|
  times << Time.parse(stat["created_at"]).hour
end

f = Hash.new(0)
times.each { |x| f[x] += 1 }

p f

再比如:

間隔-頻數圖 回復長度-頻數圖

好了,饭否的玩法多着呢!详见「饭否的玩法」。


  1. 最简单的方式就是把这条信息粘贴到浏览器地址栏里。

相关文章

  • 怎样从饭否抓数据?

    一直有个希望,希望自己写出一款能完整搜索自己的饭否消息的 app 。网页版的搜索倒是可以,但一来不方便,二来没有「...

  • 饭否饭否

    大学时我们班一北方姑娘十分热情好客,印象很深。不甚熟络,但每次在她的宿舍楼下路过,她总会笑盈盈地说“吃了吗?上去坐...

  • 饭否饭否?

    由于早上起的晚,早餐如同早中餐,一般我妈就不做午餐了,所以下午六点左右,我们就开始盼望晚餐。 六点,菜还没全做好,...

  • 饭否开放注册了,最全的饭否工具箱

    一、饭否开放注册了 沉寂已久的饭否突然可以注册了,因为即刻无法登录的朋友可以去饭否找兴酱玩了。 二、饭否工具箱 工...

  • 留底之:张小龙饭否发言

    以下为@gzallen饭否摘录。 gzallen是机器人。2010-12-15 16:27 我进到饭否就说饭否上该...

  • 开心一刻

    Android应用,从饭否API获取账号糗百的推文并展示。

  • 青花瓷charles抓包

    青花瓷charles抓包 Charles 从入门到精通 iOS使用Charles(青花瓷)抓包并篡改返回数据图文详...

  • 2018-08-14

    尚能饭否

  • 另一种廉颇老矣

    尚能饭否

  • 饭否

    最近常玩饭否,上饭否的目的是关注王兴,看看所谓的天才的兴趣和日常。 以前也玩过饭否,为啥现在却再回来呢?其实是想学...

网友评论

      本文标题:怎样从饭否抓数据?

      本文链接:https://www.haomeiwen.com/subject/fmqiextx.html