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でお願いします)

スパムまみれなHatena::Letの新着チェックを大チェッカーにしてる(スパム解決済み)

スパムだらけで、タイムラインが死んでる状態なHatena::Letですが。

このサービス(というか、匿名ダイアリー除くはてラボ全体で言えることですが)は、アクティブユーザーが少ないために、スパムによる連続投稿の恰好の餌食となっています。

仕方がないので、既存ユーザーで過去の登録から一部ピックアップして、大チェッカーにて更新チェックしてみた次第。

maRkのHatena::Letのタイムライン - 大チェッカー
スパム防止につき、自分以外は編集できないように権限を絞ってありますので。非ログインでも、OPMLで吐き出しできますので、自分向けの情報にするなりできるかと思います。

GoogleアナリティクスのAutoTrackを使用してみる

AutoTrack は Googleアナリティクス を便利に使う機能のプラグインのパッケージです。

はじめに、この機能は主に開発者向けとして提供されているものです。
はてなブログを始めたばかりでアナリティクスの設定をやりたい、という人は、google:はてなブログ Google Analytics とかすると詳しい方が解説されていますから、そちらを強くお勧めします。

前提として、analytics.js を設定済み(function(i,s,o,g,r,a,m)とかあるやつ)なこと、それと、autotrack.js と同梱のプラグイン群をホストする場所を持っていることです(自分の場合は bitbucketのサイト管理下で置いてます)

アナリティクス 日本版 公式ブログanalytics.js の自動トラッキング機能の紹介

これ、やり方がわかりにくいのですが、実はそれほど難しいものでもありません(最初英語ドキュメントくらいしかなかったりしたため)。
以下に、日本語によるドキュメントがあります。

Googleアナリティクスの便利プラグイン詰め合わせAutotrackのドキュメント日本語版 | 編集長ブログ―安田英久 | Web担当者Forum

まずは、GitHubにある、autotrackを ダウンロードしておきます。


自分の場合だと、こんなかんじの階層になってます。

└── js
    ├── autotrack
    │   ├── autotrack.js
    │   ├── gulpfile.js
    │   ├── lib
    │   │   ├── constants.js
    │   │   ├── plugins
    │   │   │   ├── autotrack.js
    │   │   │   ├── event-tracker.js
    │   │   │   ├── media-query-tracker.js
    │   │   │   ├── outbound-form-tracker.js
    │   │   │   ├── outbound-link-tracker.js
    │   │   │   ├── social-tracker.js
    │   │   │   └── url-change-tracker.js
    │   │   ├── provide.js
    │   │   └── utilities.js
    │   ├── package.json
    │   └── wdio.conf.js

(autotrack.js と libだけアップでいいような気もするのだけど。/test/とかはローカルだけでサーバーになくても大丈夫と思います)

このうち、必要なのが、autotrack.js までのパスです。example.com/ga/autotrack/autotrack.js

はてなブログへの設置


個人で行ったことのメモですので、はてなブログ公式でない、ということと、この方法による不具合で損害があったとしても当方では責任を負えませんのでご理解願います。AutoTrackのドキュメントを熟読され、テスト用のようなブログで動作確認されることが望ましいです。

設定のページで、詳細設定のタブに行きます。
headに要素を追加 とあるところの以前のコードは削除して、代わりに、AutoTrack 対応コードを入れます。

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('require', 'autotrack');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<script async src='path/to/autotrack.js'></script>

上記は全部入りの場合のスニペットです。

イベントトラッキングだけ使う、という人は以下の通りに、必要なものだけ 'require'します。

例えば、はてなブログのイベントトラッキングの時は、

記事ページだけ設置したボタンにイベントトラッキングかけるには、

<button data-event-category="button" data-event-action="click" data-event-label="{Title}"></button>

イベントカテゴリー はbutton、イベントアクションは click、 イベントラベルとして はてなブログ予約ずみ変数の{Title}でページのタイトルが GAに送信されるということになります。

outboundLinkTracker は、自分のブログのホスト名と違う外部サイトへのリンクのクリックイベントを記録するものです。

イベント カテゴリ Outbound Link
イベント アクション click
イベント ラベル リンクの href 属性の値

といった形で記録されます。

設定が済んだら、「変更する」を押して反映させます。
あとは、機能がバッティングするような、既存のスクリプトは削除しておいたほうがいいです。ga('send'~ とか。

その他、必要なトラッキングの仕込みは、デザインの編集画面の方で行います。

変更できたら、自分でアクセスしてトラッキングされていることを確認します。

f:id:maRk:20160320210935j:plain

アメブロ、AMP対応始めたってよ。。

AMP(Accelerated Mobile Pages)周りの検索してたら、何やら アメーバブログで AMP対応が始まってるらしい。

アメーバブログがAMP導入開始!|web集客コンサルタントのぼちこつ

MJDK

アメーバブログ記事で、自前のブックマークレット打つとなんかAMPページがあるらしいことがわかる。

let.hatelabo.jp

はてなブログどうするんだろう。

はてなブログトップページ(自分の)で記事一覧を折り畳みして別コンテンツを差し込む

何言ってるか不明なんだけど、サイトのトップページぽくする系のカスタマイズです。
固定ページを持たないはてなブログでは、サイトトップを作る決定打があまりないですが、こんなやり方もというので。

f:id:maRk:20160313185814j:plain

Firefox のスラッチパッドで以下をトップページを開いて実行してみます。

($=> {
  const isTop = $('html').data('page') == 'index' ? 1 : 0;
  const MAIN_INNER = $('#main-inner');
 
  if (isTop) {
    $('#main:first-child').prepend('<article id="topageContent">{{CONTENT}}</article>');
    MAIN_INNER.css('display', 'none');
    const ShowHide = $('<a/>').text("表示 / 非表示").on('click', (e)=> {
    e.preventDefault();
    MAIN_INNER.toggle();
  })
  .attr({
    'id': 'mainToggle',
    'href': '#',
  })
  .css({
    border: '1px solid',
    borderRadius: '3px',
    padding: '.1em',
  });
    $('#main').prepend(ShowHide);
  }
  return;  
})(jQuery);

これで上記のような表示ができれば、実装させることができます。

jQueryはなんらかの形で読めるようにしておき、以下のようなのをフッターあたりに貼ります。(そのまま貼っただけでは運用としては使えません)
{{CONTENT}} の部分にトップページに必要な内容を入れれば($.get()でもってくるとか)、常にトップページに何か表示させることができるかと。

<script>
  $(function(){
    var isTop = $('html').data('page') == 'index' ? true : false;
    var MAIN_INNER = $('#main-inner');
 
  if (isTop) {
    $('#main:first-child').prepend('<article id="topageContent">{{CONTENT}}</article>');
    MAIN_INNER.css('display', 'none');

  var ShowHide = $('<a/>').text("表示 / 非表示").on('click', (e)=> {
    e.preventDefault();
    MAIN_INNER.toggle();
  })
  .attr({
    'id': 'mainToggle',
    'href': '#',
  })
  .css({
    border: '1px solid',
    borderRadius: '3px',
    padding: '.1em',
  });
    $('#main').prepend(ShowHide);
  }
   return;
});
</script>

ただし、これだけでは問題があります。
無料ユーザーの場合の広告表示がスクリプト実行によって表示できない形になるため、広告ユニットをさらに追加して常時表示になるようにしておかないといけません。

これは、やっつけで対策してみたのだけど、ちょっと見た目は良くないかも

f:id:maRk:20160313192853j:plain

追記: 2018/04/18

トップページに任意の記事を固定できる機能が追加されました。
記事の管理画面の記事タイトルより、固定したい記事にチェックを入れて、横にある、編集のボタンを押すと、メニュー内の、「トップページの先頭に表示する」をクリックすることで設定できます。
staff.hatenablog.com/entry/2018/04/18/143000