masalibの日記

システム開発、運用と猫の写真ブログです

【python3】はてなブログの投稿画像を圧縮する

ブログ画像は重いとSEO的に評価されない
はてなフォトで圧縮した画像をアップしようとしたら更新処理がなかった
Wordpressにあってはてなブログにない機能の1つ

投稿した画像を圧縮する (はてなブログの場合は切り替えになる)

はてなblogAPIとはてなフォトAPIで作ってみました

私のブログは記事が500を超えています
現在の画像から画像を圧縮して新規で
投稿してその画像にブログを更新するなんて無理ゲーです

ループで全ページを回すことも可能だったのですが怖かったので1ページ単位にしています (アクセスが多いページだけやればいいという考えです)

node.jsで作りたかったが非同期処理の沼にハマったので同期処理のpythonに切り替えた (ファイルIO部分)

前提

私のブログの画像は横480ピクセルを基準にしています。 PCの事を考慮すると800ピクセルぐらいがいいらしいですが それは次回以降にやります。 またはてなフォトの圧縮率は変えていません。(100%のままです) 最終的には変えると思うがもう少しテストが必要なのでそのままです。

はてなフォトの圧縮率は以下のページがオススメ

www.xn--4kq3d728e.com

仕様

入力項目

  • hatena_id

はてなブログダッシュボード
 => 設定
http://blog.hatena.ne.jp/masalib/masalib.hatenablog.com/config
             ↑ここ    
またはアカウト設定
f:id:masalib:20161026224829p:plain

  • password(APIキー)

はてなブログダッシュボード
 => 設定
 => 詳細設定
 => AtomPub
   ルートエンドポイントAPIキーをメモる

f:id:masalib:20161026224357p:plain

f:id:masalib:20161026224406p:plain

  • blog_id

独自ドメインの場合はやった事がないのでわからないのですが
私の場合は
masalib.hatenablog.com

サブアカはmasalib.hatenablog.jpになります

  • 対象ページ(targeturl)

画像を圧縮したいページになります。
今回は
https://masalib.hatenablog.jp/entry/2016/02/19/014308 を使用しています

動き

  1. 対象ページのURLからentryIDを取得する
  2. entryidとblog_idからブログデータを取得する
  3. 更新データから画像のURLを取得する
  4. 画像URLから画像をダウンロードして圧縮してはてなフォトライフに投稿する
  5. はてなフォトライフの投稿結果(XML)から画像URLを特定する
  6. はてなブログの更新のXMLを用意して元々の画像URLと投稿した画像URLを切り替える
  7. 切り替えたXMLはてなブログAPIに送信(PUT送信)する

正常系がやっとできた(^o^)

結果

f:id:masalib:20190401212413j:plain
圧縮結果

圧縮前 圧縮後 圧縮率
1 114KB(1024×768) 16.4KB(480×360) 14.3%
2 74.9KB(480×640) 31.9KB(480×640) 42.5%

2はピクセルが同じだけど圧縮できているのかのテストです

変換前

№1
f:id:masalib:20160218144707j:image

№2
f:id:masalib:20190323161133j:plain

変換後

№1
f:id:masalib:20160218144707j:image

№2
f:id:masalib:20190323161133j:plain

できていない事(todo)

  • はてな記法markdown形式に対応していない
  • pngを弾く処理がない。(PNGはサイズが重くなるらしいのでやらない方向)
  • gifを弾く処理がない。(アニメーションとかはいると難しいのでやらない)
  • 画像が特定のサイズ(横480)未満の場合にリサイズのみおこなう
  • 画像の横幅を指定しない場合はリサイズのみおこなう
  • テストとかバリデーションの追加
  • colaboは一般の人は無理ゲーなので画面を用意する
  • 非公開の場合はURLがとれないのでentry_idからできるようにしないといけない

Source

バグがいっぱいあるSourceです。
あとでgithubに移行するかも・・・

colab.research.google.com 当たり前ですが、何も保証しません。自己責任

参考URL