はてなブログ同士の記事移転やリダイレクトをここ2,3記事で試みています。
01概要
ブログを統合する場合は、
この2記事で終了しています。
この記事で最後になりますが、今やっているのは特定のカテゴリーだけを別ブログに移転しリダイレクトすることです。
はてなブログ内で特定カテゴリーを取り出すことはできそうもありませんので、下記記事では node.js を使ってエクスポートした記事から取り出しています。
残るは、元ブログで特定カテゴリーだけ移動先ブログにリダイレクトする方法です。
02HTMLソースでカテゴリー表示を探す
記事の 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": ""
となっていますので、これを検索すれば特定のカテゴリーを特定できます。
03特定カテゴリーをリダイレクトする 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データ、いろいろ使えそうですね。