pythonでWebスクレイピングについて調べてみる
前回のつづき。はてなブログAPIで予約投稿できないことがわかった。
どうするか
どうにかして予約投稿するパターン。
- cronによるAPI定期実行
- Google Apps Script(GAS)によるAPI定期実行
- はてなサイトのスクレイピングによる投稿
予約投稿しないパターン。
- APIで下書き投稿し、手動でサイトで設定する(1記事ずつ編集画面にいき日時設定と「指定日時で予約投稿する」し「予約投稿する」ボタン押下)
はてなブログ卒業パターン。
- APIから予約投稿できるサービスを探す
- GitHubPagesなどにHTMLファイルをアップする
- 静的サイトジェネレータで作成し、GitHubPagesなどにアップする
- 静的サイトジェネレータで作成し、GitHubなどにアップし、GASで参照してアップ先に予約投稿する
予約投稿するパターン
A. cronによるAPI定期実行
PCが起動していない時刻だったら予定通り投稿できない。そのためのサーバなど作りたくない。
B. Google Apps ScriptによるAPI定期実行
Consumerキーなど秘密キーが漏洩する。
C. はてなサイトのスクレイピングによる投稿
サイトからは「指定日時で予約投稿する」ことができているのだから、できるはず。
しかし、ログインやらクッキーやらUser-Agent偽装やら面倒が多そう。 User-Agentによって返すページの内容を変えていることは分かっている。WindowsXPとLinuxMintではページが微妙に違う。また、サイトの内容を変更されてしまったら使えなくなる。どう作るか。
懸念
A,Bの場合、実際の投稿時間が秒単位でずれるとURLの/yyyy/mm/dd/hhmmss
がずれるかもしれない。カスタムURLで指定できればいいのだが、APIにはない。
Cの場合、上記の問題は解消する。しかし、実装がとてつもなく大変そう。Webスクレイピング技術が必要。
予約投稿しないパターン
D. APIで下書き投稿し、手動でサイトで設定する
Dは妥協案。肝心の間違いやすい日時指定が自動化できないのは痛い。
工夫次第ではこれまでより早く作成できる。テンプレート差し込み、ローカルによる表示確認を実装すれば。ただし、実装が大変そうな上、はてなブログ編集画面でのデータ保存機能が使えなくなる。それらを考えると、効果は微妙かもしれない。
もしくは、全ページ一斉修正などに使えるかもしれない。schema.org埋め込みとか。また、ブログを取得してバックアップする用途もある。投稿はあきらめて他にAPIでできることをやってみる方向性もある。
はてなブログ卒業パターン
最も大変。できれば今はやりたくない。
Markdownのテンプレート作成くらいならいいかもしれない。
E. APIから予約投稿できるサービスを探す
たぶん無い。
F. GitHubPagesなどにHTMLファイルをアップする
HTML作成が大変。また、GitHubPagesは多分1リポジトリあたり1GBが上限。画像も含めると少ない。毎月リポジトリを作成すれば1GB未満に抑えられると思う。
記事をGoogleにすぐさま通知するPubSubHubbubもしたい。さもなくば自分がパクリサイト認定される可能性がある(そんな価値ないが)。自分でアップする場合は検討することが多そう。
G. 静的サイトジェネレータで作成し、GitHubPagesなどにアップする
静的サイトジェネレータを使いこなすのが大変。
H. 静的サイトジェネレータで作成し、GitHubなどにアップし、GASで参照してアップ先に予約投稿する
GASからアップする方法を考える必要がある。
所感
とりあえずWebスクレイピングについて少し調べてみるか。