はてなブログ同士の記事移転やリダイレクトをここ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データ、いろいろ使えそうですね。