
こんにちは、現役沖縄フリーランスエンジニアのmah(MaLanka)です。
このブログでは、
僕がIT未経験から約1年でフリーランスエンジニアになるまでの過程、
ノウハウなどを書いていきます。
今回は、
- 【Ruby】はてなブログのAPIで記事一覧取得時、下書きを除外する
についてです。
【Ruby】はてなブログのAPIで記事一覧取得時、下書きを除外する
やりたいこと
はてなブログのAPIで記事一覧を取得する際に、
下書きのものを除外したい。
記事一覧の取得については、
下記の記事を大変参考にさせて頂きました。
Ruby:はてなブログAPIを使って記事の一覧をJSON形式で取得する - Madogiwa Blog
はてなブログAPIを使って記事の一覧をJSONで取得する · GitHub <= ソースコードのみ
解決方法
1、
Nokogiriでパースして得たオブジェクトにto_sして、
scanで下書きかどうかを表す文字列を抜き出す。
# 参考にしたサイトのコードのget_entry_list()の内部 # entry = Nokogiri::XML.parse(entry, nil, 'utf-8') draft_flgs = entry.to_s.scan(/\<app:draft\>.*<\/app:draft\>/) # こんな感じの配列が返ります # draft_flgs => [ "<app:draft>no</app:draft>", "<app:draft>no</app:draft>", "<app:draft>no</app:draft>", "<app:draft>yes</app:draft>", "<app:draft>no</app:draft>", "<app:draft>no</app:draft>", "<app:draft>yes</app:draft>", "<app:draft>no</app:draft>", "<app:draft>no</app:draft>", "<app:draft>no</app:draft>" ]
2、
1記事毎にループを回すため、
記事タイトルの配列のインデックスと1のdraft_flgsを対応させ、
「draftがyesのもの」をスキップすればOK。
(APIで一度に取得できる記事数は10件なので、タイトルの配列と下書きフラグの配列のインデックスは一致します)
参考にさせて頂いたコードの、
def entry_list_to_hash(entry)メソッド の中に追加します。
# title,content,categoryのリストをhashに整形して返却するメソッド
def entry_list_to_hash(entry)
entry_hash_list = []
titles = entry.css('entry title').map(&:text)
contents = entry.css('entry content').map(&:text)
# 記事とcategoryは、1:nの関係のため、記事毎に配列で取得
category = []
entry.css('entry').each do |e|
category << e.css('category').map{ |c| c.attribute('term').value }
end
draft_flgs = entry.to_s.scan(/\<app:draft\>.*<\/app:draft\>/) ### 追加 ###
titles.length.times do |i|
entry_hash_list << titles[i] if draft_flgs[i].match?(/no/) ### if以降を追加 下書きの記事はスキップする 下書きの記事はdraftがyes ###
end
entry_hash_list
end
以上です。
RailsやRubyを学びたい人へ
RailsやRubyを学びたい人は、
RailsHack(レイルズハック)という、
最近できた新しいプログラミングスクール(今なら通常価格69,800円が、早期割で29,800円!)か、
Udemy
で下記のコースを受講すると良いです★
✅1. フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座
✅2. 【はむ式】ハンズオンで学ぶRuby on Rails 6【Dockerにも触れられる】
<- おすすめ。ハムさんはReactやTypeScriptの教材も非常に丁寧。
✅3. はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう
また、
Udemy
は定期的にセールをやっていますし(90%OFFとかもザラ)、
「30日間なら返金できる」ので、
満足できなかった時でも安心です。
