maRkの

キャンペーンだとか、Chess.appについてのなにか

ランダムエントリーパーツをブログサイドバーに設置

古くからあるカスタマイズですが、表示のたびにランダムに切りかわる過去記事の参照リンクのカスタマイズです。

f:id:maRk:20160429190753j:plain

PHPを使いますので、別にサーバーが必要です。

おおまかな作業は以下です。

はてなブログAtomPub - Hatena Developer Center
) を使って取得

  • 取得したら、タイトルとリンクなど必要な情報のみ解析して、JSON形式として書き出し
  • 書き出されたJSONから、ランダムに抜き出しして、HTMLに整形
  • はてなブログ側で表示

といった形になります。(HTML整形は はてなブログから直接にJSON読む手もありますが、外部
ファイルのリードを抑えてなるべく軽くしたいところなので)

管理としては、

  • 全記事取得はタスク処理などで定期に更新。(更新間隔はブログ記事の更新頻度による)
  • 全記事取得するphpはドキュメントルートより上に置き、書き出すJSONを公開ディレクトリ下に
  • 外部ファイルには、 Access-Control-Allow-Origin で、許可サイトを登録するようにする


参考:


www.bunkei-programmer.net

AtomPub での取得方法。 JAVAによるものですが、手順としては他の言語でも大丈夫です。



配列のランダム抽出、面倒になったので、以下のメソッドに頼ることに。

【PHP】配列から指定したエントリの数のバリューをランダムに抽出する - Qiita


追記:
以下にて、使用ファイルのサンプルを用意しました。
Get Random Entry — Bitbucket

※ 正確には全記事取得ではありません。(最後のページの要素が1つな時、配列にならなかった場合の処理を行っていないため)

170記事で、ファイル書き出し完了までにおよそ25秒くらいでした。タイムアウトで止まるようならば、ループのところでカウンター変数セットしてリミットかける必要あると思われます。
※ 処理が重い場合に、共用サーバーでプロセスkillになるかもしれないので、ローカルでテストされてから使う方がいいです。
(問題のある場合に公開取りやめますが、基本、at your own riskでお願いします)