読者です 読者をやめる 読者になる 読者になる

ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

atomutilを使って全記事のタイトルと本文を取得する

はじめに

はてなの編集画面で、自分の記事一覧取得って、ない、ですよね。。。?(決まった件ごとの表示しか)

単純にtitleと投稿日、カテゴリぐらいを取得して眺めたいという思いがある(笑)のでやります。

まずは全ページを取得するシェルを書いてみましょう。

前回の記事で書いたものをちょっといじればいけますね。

take-she12.hatenablog.com

ループ書くことと、停止条件がどうなるかを探る必要がありますね。

書いたスクリプト

#!/bin/sh
# get first page
curl --user take_she12:zitm8l85db https://blog.hatena.ne.jp/take_she12/take-she12.hatenablog.com/atom/entry > /home/take/script/output1.xml
page=`curl --user take_she12:zitm8l85db https://blog.hatena.ne.jp/take_she12/take-she12.hatenablog.com/atom/entry | grep "link rel=\"next\"" | sed -e 's/.*page=\([0-9]*\).*/\1/'`
num=2

# get next page loop
while true
do
  curl --user take_she12:zitm8l85db https://blog.hatena.ne.jp/take_she12/take-she12.hatenablog.com/atom/entry?page=${page} > /home/take/script/output${num}.xml
  page=`grep "link rel=\"next\"" /home/take/script/output${num}.xml | sed -e 's/.*page=\([0-9]*\).*/\1/'`
#  page=`curl --user take_she12:zitm8l85db https://blog.hatena.ne.jp/take_she12/take-she12.hatenablog.com/atom/entry?page=${page} | grep "link rel=\"next\"" | sed -e 's/.*page=\([0-9]*\).*/\1/'`
  num=$(( num + 1))

  ## break if last page
  if [ "${page}" = "" ]; then
    break
  fi

  ## for safety
  if [ $num == 100 ]; then
    break
  fi

done

# get title tag
i=1
while true
do
  grep "<title>" output${i}.xml | grep -v "<title>ツナワタリマイライフ</title>"
  grep "<category" output${i}.xml
  i=$(( $i + 1))

  ## break if last page
  if [ $i -eq $num ]; then
    break
  fi

  ## for safety
  if [ $i == 100 ]; then
    break
  fi

done

rm *.xml

これでtitle一覧は確かに取得できたんです。ただ、これ1ページごとのxmlを対象にgrepかけてるから、タイトルがずらーっと並んだ後カテゴリがずらーっと並ぶことになって、1記事に複数カテゴリつけることがあるから、あ〜〜〜詰んだ〜〜〜ダメだ〜〜〜ってなったので別の方法を考えることにしました。

ちなみに取得はこんな感じ。

<title>「脳が認める勉強法」から考える、自分にとってベストの勉強法</title>
<title>日報をgitlabで管理すると結構いいよ</title>
<title>ブログの記事ネタリストをtoodledoで管理する</title>
<title>小銭貯金ソリューション、ついに計測完了した話</title>
<title>node.jsでhello,worldする</title>
<title>小銭貯金ソリューション、いよいよ両替するためにコインケースを買った話</title>
<title>「システム思考をはじめてみよう」を読んで考える、努力や我慢をしない問題解決</title>
<title>mongodbの薄い本を読んだ</title>
<title>はてなブログの投稿予告ツイートをrubyで書く② 複数ページ取得&amp;xmlマージ編</title>
<title>新しい言語・フレームワークの学び方を議論した</title>
<category term="本" />
<category term="教育" />
<category term="ソフトウェア開発" />
<category term="ソフトウェア開発-備忘録" />
<category term="ブログ" />
<category term="生活" />
<category term="ソフトウェア開発" />
<category term="ソフトウェア開発-node.js" />
<category term="生活" />
<category term="考え方" />
<category term="本" />
<category term="ソフトウェア開発" />
<category term="ソフトウェア開発" />
<category term="ソフトウェア開発-Ruby" />
<category term="ソフトウェア開発-シェルスクリプト" />
<category term="ブログ" />
<category term="ソフトウェア開発" />

どうでもいいけどシェルのwhileもforも使い勝手悪い。もっといい書き方ないですか。

atomuitl

せっかくatom形式で返ってくるんだからxmlで扱おうよ、いい加減ね、と思い検索した。

msyksphinz.hatenablog.com

こちらの記事のまんまで見事に記事のタイトルと本文が取得できました。。。今までの時間はなんだったんだ感すごい。そう、私は愚か。

wordcloud

せっかくなのでワードクラウドやってみました。create→ファイルアップロードなり直接テキストぶちこむなり。

silversightをいれた上でsafariで見ました。chromeだとダメでした。

www.tagxedo.com

f:id:take_she12:20160227125520p:plain:w500

あんまおもしろくないな!(笑)

まとめ

今後はatomutil使って記事とカテゴリのリスト取得をやろうかな。rubyだし。