やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

pythonでWebスクレイピングについて調べてみる

前回のつづき。はてなブログAPIで予約投稿できないことがわかった。

どうするか

どうにかして予約投稿するパターン。

  1. cronによるAPI定期実行
  2. Google Apps Script(GAS)によるAPI定期実行
  3. はてなサイトのスクレイピングによる投稿

予約投稿しないパターン。

  1. APIで下書き投稿し、手動でサイトで設定する(1記事ずつ編集画面にいき日時設定と「指定日時で予約投稿する」し「予約投稿する」ボタン押下)

はてなブログ卒業パターン。

  1. APIから予約投稿できるサービスを探す
  2. GitHubPagesなどにHTMLファイルをアップする
  3. 静的サイトジェネレータで作成し、GitHubPagesなどにアップする
  4. 静的サイトジェネレータで作成し、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スクレイピングについて少し調べてみるか。