fastladder API操作に関する覚書1

おのみち.pyのもくもく会に参加してOpenFastladderのAPIの叩き方をrubyを使って調査した
当記事で今回わかった内容を記録
なお、使用した言語はrubyでライブラリとしてmechanizeとnokogiri、jsonを使用

ログイン処理


require 'mechanize'
require 'nokogiri'
require 'json'

agent = Mechanize.new
agent.user_agent = "適当なユーザーエージェント"
page = agent.get("http://your fastladder url/login/")
form = page.forms[0]
form.username = 'ユーザ名'
form.password = 'パスワード'
login_page = agent.submit(form)

上記コードでとりあえずのログイン処理ができる

api_key

api_keyに関してはOpenFastladder クローラー向け RPC についてが参考になる
LDRやopen化以前のfastladderの情報は当てにならない
ただapi_keyが必要になる場面が今のところ無いのでもしかしたらLDR等とはapi_keyの扱いが違うのかも
とはいえ取得できてることにデメリットはない


agent.get("/account/apikey") do |page|
  html = Nokogiri::HTML(page.body)
  nodesets = html.xpath('//p[1]').text.gsub(/\n/,"")
  @api_key = /is\:/.match(nodesets).post_match
end

pinの取得

とりあえず肝心要のpin取得
/api/pin/allをPOSTしたらOK


all_pin = agent.post("/api/pin/all")
all_pin_html = Nokogiri::HTML(all_pin.body)
result =  JSON.parse(all_pin_html)
p result

こういったコードを叩くと


[{"link"=>"https://news.yahoo.co.jp/pickup/6273380", "title"=>"監禁 男は民泊に再三出入りか", "created_on"=>1519539721}, {"link"=>"https://www.jiji.com/jc/article?k=2018022500278&g=soc&m=r\
ss", "title"=>"俳優の左とん平さん死去=「時間ですよ」、80歳", "created_on"=>1519539717}, {"link"=>"https://www.jiji.com/jc/article?k=2018022500338&g=soc&m=rss", "title"=>"民泊に再三出入\
りか=米国籍の男、電車で移動-兵庫女性不明", "created_on"=>1519539716}]

といった塩梅に返ってくる

pinの削除

こっちも肝心なpinの削除
こっちは/api/pin/removeをPOSTすれば消せる
ただしPOST時に消すURLをパラメーターとして送ってやる必要がある


pin_del = agent.post("/api/pin/remove", {
                       link: 消すURL,
                     })

pinの追加

忘れちゃいけないpinの追加API
/api/pin/addをポストして、パラメーターにtitleとlinkをつけておけば万事OK


addpin = agent.post("/api/pin/add",{
    title: "CCGのオシャンティなWebサイト",
    link: "https://www.canned-catfood.com/"
})

pin全削除

pinを全部削除するAPI
/api/pin/clearをPOSTするだけ


delallpin = agent.post("/api/pin/clear")

Feed一覧

Feed一覧の取得API
/api/subsをPOSTすると登録してるFeed一覧が返ってくる
POST時に未読のみ/既読も含むを選択できるパラメータがある


all_feed = agent.post("/api/subs",{
    unread: 0,
    }
)
all_feed_html = Nokogiri::HTML(all_feed.body)
puts all_feed_html.text

上記コードで


[{"subscribe_id":1,"unread_count":12,"folder":"","tags":[],"rate":0,"public":0,"link":"http://b.hatena.ne.jp/hotentry","feedlink":"http://feeds.feedburner.com/hatena/b/hotentry","title":" はてな\\
ブックマーク - 人気エントリー","icon":"/favicon/1","modified_on":1519542739,"subscribers_count":1},{"subscribe_id":2,"unread_count":0,"folder":"","tags":[],"rate":0,"public":0,"link":"https://www\
.jiji.com/","feedlink":"https://www.jiji.com/rss/ranking.rdf","title":"jiji.comアクセスランキング","icon":"/favicon/2","modified_on":1519542741,"subscribers_count":1},{"subscribe_id":3,"unread_co\
unt":6,"folder":"","tags":[],"rate":0,"public":0,"link":"https://news.yahoo.co.jp/","feedlink":"https://news.yahoo.co.jp/pickup/rss.xml","title":"Yahoo!ニュース・トピックス - 主要","icon":"/favic\
on/3","modified_on":1519542737,"subscribers_count":1}]

が返ってくる
ちなみにunreadパラメータが0の場合はすべてのfeedが返ってきて、1の場合は未読のみとなる

Feed取得API

Feedの内容を取得するAPI
この場合は未読既読関係なく持ってるfeedが全て返ってくる
/pin/allにPOSTしてやればOK
なお必須のパラメータとしてsubscribe_idが必要になってくる
subscribe_idは上のFeed一覧取得時の返り値の中にある
オプションとしてlimitとoffsetがある
limitは返ってくる数の制限でoffsetは未確認


feedlist = agent.post("/api/all", {
   subscribe_id: 1,
   limit: 1,
   })
feedlist_html = Nokogiri::HTML(feedlist.body)
puts feedlist_html.text

Feed全既読化API

単一Feedを全て既読化するAPI
/pin/touch_allをPOSTすれば消える
当然パラメータとしてsubscribe_idは必須


readallfeed = agent.post("/api/touch_all", {
                           subscribe_id: 1,
                         })

スポンサーリンク

関連記事

コメントをお待ちしております

HTMLタグはご利用いただけません。