labunix's blog

labunixのラボUnix

はてなダイヤリーのRSS2からユーザの最新記事のテキストバックアップを取得する

 

■スクリプトはgithubにあります。
 cronに設定しておくと、放っておいてもバックアップしてくれる。

 get_new_hatenablog.sh
 https://github.com/labunix/get_new_hatenadialy_backup
 
$ env EDITOR=vim crontab -e
$ env EDITOR=vim crontab -l | grep -v ^#
15 20 * * * /home/labunix/hatena/get_new_hatenablog.sh
$ cat ~/hatena/mydaialy_link.txt
<a title="2012/04/23 Squeezeにclamavを導入。EICARチェック [20120423] "
href="http:/d.hatena.ne.jp/labunix//" target="about:blank">
2012/04/23 Squeezeにclamavを導入。EICARチェック [20120423] </a>

■はてなダイヤリーのRSS2を取得する
 ※トップページは無視できる。

$ w3m -dump "http://d.hatena.ne.jp/labunix/rss2" | \
  grep "^\|^" | sed s/"\|\|\|"//g
labunix の ラボゆにっくす
http://d.hatena.ne.jp/labunix/
Squeezeにclamavを導入。EICARチェック
http://d.hatena.ne.jp/labunix/20120423
実メモリを増やした場合のメモリ使用率を得る
http://d.hatena.ne.jp/labunix/20120422
ftp自動転送スクリプト for linux
http://d.hatena.ne.jp/labunix/20120421
vmnet8にIPマスカレード(Squeeze編)
http://d.hatena.ne.jp/labunix/20120408
仮想マシンのsqueeze2台にDNSを導入
http://d.hatena.ne.jp/labunix/20120404

■最新のはてなダイヤリー記事を取得する(1)

$ w3m -dump "http://d.hatena.ne.jp/labunix/rss2" | \
  grep "^\|^" | sed s/"\|\|\|"//g | \
  grep "\|" | \ 
  awk '{if(NR==3) print; else if(NR==4) print}'
Squeezeにclamavを導入。EICARチェック
http://d.hatena.ne.jp/labunix/20120423

■過去のブログ取得法と組み合わせると「(NR==4)」の時だけでよいことが分かる。

$ cat get_new_myhatenablog
#!/bin/bash

# 環境変数の取り込みとはてなダイヤリーのバックアップディレクトリに移動
# 実行するユーザに注意
set -e
MYPWD=~/hatena
if [ ! -d "${MYPWD}" ];then
  echo "Error, Not FOUND ${MYPWD}"
  exit 1
fi
cd ${MYPWD}

# はてなユーザを変数で定義する
# あなたが「labunix」以外のユーザのはてなダイヤリーの最新記事をバックアップ
# したいと望むならここを書き換えてください。

USER=labunix

# RSS2から最新のはてなダイヤリーのURLを取得
# 例えば、以下のような形式
# http://d.hatena.ne.jp/labunix/20120423

GETURL=$(w3m -dump "http://d.hatena.ne.jp/${USER}/rss2" | \
  grep "^\|^" | sed s/"\|\|\|"//g | \
  grep "\|" | \
  awk '{if(NR==4) print}' | sed s%"\|"%%g)

# はてなダイヤリーの記事固有のディレクトリ部分を取得
# 以下の形式
# yyyymmdd

GETFILENAME=$(echo ${GETURL} | awk -F\/ '{print $5}')

# 記事のバックアップが無ければ取得する
# 取得したバックアップに「このエントリ」を含む行を取得する
#

if [ -f "${GETFILENAME}" ];then
  echo "Do Nothing"
else
  w3m -dump "${GETURL}" > "${GETFILENAME}"
  LINKURL="`head -20 "${GETFILENAME}" | grep ^20 | sed s/"このエントリ.*"//g`"
  echo  "${LINKURL}" >> mydaialy_link.txt

  # システムメールでお知らせ
  # 不要ならコメントアウトしても動作に支障は無い

  cat mydaialy_link.txt | mail -s "New Hatena Blog Backup" `whoami`

fi

unset MYPWD
unset GETURL
unset GETFILENAME
unset LINKURL
exit 0


■RSS2で取得できる分よりも過去のネタを保存するには。。。

 はてなダイヤリーのテキストモードバックアップ
 http://labunix.hateblo.jp/entry/2012/03/03/224721

■日付の生成(最大値を得る)

$ for year in 2012;do \
    for day in `seq -w 01 31`;do \
      for month in `seq -w 03 04`;do \
         echo $year$month$day; \
      done; \
    done; \
  done | wc -l
62

■前回取得日以降、最新更新日以前で絞る

$ w3m -dump "http://d.hatena.ne.jp/labunix/" | grep "閲覧回数"; \
  for year in 2012;do \
    for day in `seq -w 01 31`;do \
      for month in `seq -w 03 04`;do \
        echo $year$month$day; \
      done; \
    done; \
  done | sort | grep -A 62 20120304 | grep -B 62 20120423 | wc -l
51

■保存。単純PVの増加が見られないのは、プロキシ経由だったからのようだ。

$ w3m -dump "http://d.hatena.ne.jp/labunix/" | grep "閲覧回数"; \
  for year in 2012;do \
    for day in `seq -w 01 31`;do \
      for month in `seq -w 03 04`;do \
        echo $year$month$day; \
      done; \
    done; \
  done | sort | grep -A 62 20120304 | grep -B 62 20120423 | for list in `xargs`;do \
    w3m -dump "http://d.hatena.ne.jp/labunix/${list}" >  "$list"; \
  done; \
  w3m -dump "http://d.hatena.ne.jp/labunix/" | grep "閲覧回数"
                                                        閲覧回数:54708回
                                                        閲覧回数:54708回

$ w3m -no-proxy -dump "http://d.hatena.ne.jp/labunix/" | grep "閲覧回数"
                                                        閲覧回数:54764回

■ブログを書いていない日のファイルを削除

$ for list in *;do \
     grep "20[0-9][0-9]/[0-1][0-9]/[0-3][0-9]" $list > /dev/null || rm "$list"; \
   done

$ ls
20120304  20120311  20120318  20120328  20120404  20120422
20120306  20120312  20120324  20120330  20120408  20120423
20120308  20120315  20120325  20120401  20120421

■取得したリンクの一覧

$ for list in *;do \
    LINKURL="`head -20 "${list}" | \
    grep ^20 | sed s/"このエントリ.*"//g`"; \
    echo  "${LINKURL}"; \
  done
2012/03/04 Debianのntpdでのslewモード [20120304] 
2012/03/06 うるう秒の検証に使えそう ntptime [20120306] 
2012/03/08 Debian Lenny/Squeezeでのうるう秒対策まとめ [20120308] 
2012/03/11 Debian Lenny にsquidGuardを導入 [20120311] 
2012/03/12 SqueezeにもsquidGuardを導入 [20120312] 
2012/03/15 debian SquidGuardでブロックログを出力 [20120315] 
2012/03/18 設定、ログファイルからiptablesコマンドに変換する [20120318] このエン
2012/03/24 bashで人気言語アンケートサイトの結果をcsvに変換してみる [20120324] 
2012/03/25 NICTとDebianの時刻同期をIPv4に固定する [20120325] 
2012/03/28 Lennyのapt-get(sources.list)をアーカイブ参照に変更する [20120328] こ
2012/03/30 Lenny amd64版をSqueezeにアップグレード [20120330] 
2012/04/01 仮想マシンのSqueezeを256MBで快適にする [20120401] 
2012/04/04 仮想マシンのsqueeze2台にDNSを導入 [20120404] 
2012/04/08 vmnet8にIPマスカレード(Squeeze編) [20120408] 
2012/04/21 ftp自動転送スクリプト for linux [20120421] 
2012/04/22 実メモリを増やした場合のメモリ使用率を得る [20120422] 
2012/04/23 Squeezeにclamavを導入。EICARチェック [20120423] 

    
■最近、はてなの「いつまでもベータ」っぷりに呆れかけている今日この頃です。
 いつでも移行出来るよう、バックアップを自動で行っておきましょう。。。
 ところで移行先をどうしようか。。。