おのみち.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,
})
スポンサーリンク
コメント