はてなブログの特定のカテゴリーだけをリダイレクトする

はてなブログ同士の記事移転やリダイレクトをここ2,3記事で試みています。



概要

ブログを統合する場合は、

この2記事で終了しています。


この記事で最後になりますが、今やっているのは特定のカテゴリーだけを別ブログに移転しリダイレクトすることです。

はてなブログ内で特定カテゴリーを取り出すことはできそうもありませんので、下記記事では node.js を使ってエクスポートした記事から取り出しています。


残るは、元ブログで特定カテゴリーだけ移動先ブログにリダイレクトする方法です。


HTMLソースでカテゴリー表示を探す

記事の HTMLソースに該当するカテゴリーの表示があれば、それを見てリダイレクトさせることができます。

エンコードされていないテキスト文字で最初に現れるのは bodyタグ、たとえば <body class="page-entry enable-top-editarea enable-bottom-editarea category-映画 globalheader-off"> という風にクラス名にカテゴリーが使われています。ただ、これはカテゴリーがない場合には表示されません。

はてなブログの HTMLにはカスタムデータ属性がたくさん使われており、そのうち htmlタグのデータ属性に data-data-layer というデータ属性があり、エンコードされていますが、ブログや記事の情報がJSONデータで保存されています。


{
    "hatenablog": {
        "page_id": "entry",
        "brand": "pro",
        "analytics": {
            "non_sampling_property_id": "UA-29716941-30",
            "brand_property_id": "",
            "separated_property_id": "UA-29716941-25",
            "property_id": "UA-20445147-2"
        },
        "admin": {},
        "permalink_entry": {
            "uri": "https://www.movieimpressions.com/entry/emma",
            "categories": "映画",
            "hour": "18",
            "author_name": "ausnichts",
            "title": "「エマの瞳」(ネタバレ)プレーボーイと盲目の女性の恋、だけの映画なのか?",
            "date": "2019-05-05"
        },
        "blog": {
            "owner_name": "ausnichts",
            "name": "そんなには褒めないよ。映画評",
            "uri": "https://www.movieimpressions.com/",
            "disable_ads": "pro",
            "force_pc_view": "true",
            "enable_ads": "false",
            "is_public": "true",
            "content_seems_japanese": "true",
            "is_sleeping": "false",
            "entry_show_footer_related_entries": "false",
            "enable_keyword_link": "false",
            "lang": "ja",
            "is_responsive_view": "true"
        },
        "router_type": "blogs",
        "pro": "pro",
        "brand_tracking_category": "pro"
    }
}


ここには、カテゴリーがない記事の場合でも "categories": "" となっていますので、これを検索すれば特定のカテゴリーを特定できます。


特定カテゴリーをリダイレクトする Javascript

<script>
(function(){
if(location.href.indexOf('entry') !== -1){
    var ddl = document.getElementsByTagName('html')[0].getAttribute('data-data-layer');
    if(ddl.indexOf('"categories":"カテゴリー名または空白"') !== -1) {
        var url =  'http(s)://リダイレクト先のドメイン' + location.pathname;
        document.getElementsByTagName('link')[0].href = url;
        location.href = url;
    }
}
})();
</script>

カテゴリーを検索するだけですのでデコードしなくても文字列検索でいいと思います。

これを 設定 > 詳細設定 > headに要素を追加 に入れておけば特定カテゴリーだけリダイレクトされます。


この JSONデータ、いろいろ使えそうですね。