memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

はてなブログの購読リストが読みにくいので何とかしたかっただけなのに...何事ほどほどがいいのかもね

経緯

はてなブログの購読ブログ数は5,6くらいでした。

更新情報をメールするように設定していたので、更新情報を出勤時に電車で眺めるのが日課でした。

色々あり購読ブログ数を100以上(具体的な数が見えないのが何ともいえない。。。)に増やしたのですが、するとメールでの更新チェックが大変になりまして。

といっても、もちろん全部読むぞーという感じではなく、隙間時間で1つずつ読む感じだったのですが。。。ブログ数が多くなるとページ切り替えになるため1つ読んだあとに戻るとなぜかトップに戻るためいちいちスクロールダウンしなければならず。。。使いにくかったのです。

何とかならないかな。。。とこの1週間くらい思っていました。

はてなブログとは別にRSSリーダー(inoreader)で登録したサイトの更新情報を見るもの日課にしていました。

inoreaderではタイトルとダイジェストを見て興味があればページにアクセスする感じ使っていますが、スマホでも1つ1つ記事を読むのも横にスワイプするだけでサクサク読み進められます。

ということで、inoreaderにはてなブログの情報をインポートして読めるようにしたらいいのかな。。。と思ったのが一昨晩でした。それから隙間時間であれこれやった記録を以下に書いて行きたいと思います。

全体の作業の流れとしては以下になります。

(1)はてなブログから購読ブログ情報(URL)を取り出す。

(2)はてなブログの購読ブログで購読やめるボタンを押す(←これはそのままにしておきたかったのですがいくつ購読しているかわからなくなったのでしかたがなく消しながら残り数を見ようとしたためでした)。

(3)そのURLからinoreaderのインポート用のOPMLファイルを生成する。

(4)そのOPMLファイルをinoreaderにインポートします。

購読ブログ情報を取り出す

はてなブログの購読リストにはどういうわけか購読しているブログのリストが表示されません。いや、表示されていないわけではなくページ切り替えをしていかないと全体が見えない設計になっています。そもそもブログを何個購読しているのかもわかりません。なので、自分が購読しているブログのURLを取り出すにはUI以外の方法が必要になります。

ググってみると以下のスクリプトを公開してくださっている方がいました。いや。。。素晴らしい。私と同じような問題感から効率的に(ページ切り替えを押さずに)購読リストをチェックできるようにUIを上書きするようなスクリプトを作成されていました。

kanaxx.hatenablog.jp

このスクリプトを少し改変させてもらって、ブログごとのURLを取り出すことができました。変更箇所は2箇所だけです。

以下、「summary +=」の直下2行を追加しています。元々あったhtmlをすべてコメントアウトします。「①をコメントなし、②をコメント」にするとURL一覧がページに表示されます。このURLリストを後で使いますのでコピペしてどこかに保存しておきます。さらに、「①をコメント、②をコメントなし」にすると「購読やめる」リンクが表示されますので、1つ1つクリックして「購読やめる」を押していきます。結局、150くらいのブログを購読していたようですが、二度としない操作なので手動でポチポチクリックする感じです。Webページから「購読ボタン」を探すよりは手間が少ないと思いますので。ちなみに上にも書きましたが、購読はそのままにしておきたかったのですが。。。このスクリプトを使ったときに購読ブログのすべてが取得できるとは思えなかったので購読をやめることで取得件数の変化を見たかった。。。というのがありました。URLがあればいつでも購読は復活できますので。

      summary += 
//        `<pre>${ans.link.split("/")[2]}</pre>`  //①URL一覧を表示したいとき
`<a href="https://blog.hatena.ne.jp/me/${ans.link.split("/")[2]}/subscribe">購読やめる</a><br>`  //②購読やめる

//        `<div style="display: flex;">
//          <div style="width:60px;">
//          <img src="${ans.img}" width="48" >
//          </div>
//          <div style="margin-bottom:10px; width: calc(100% - 60px);">
//          <span style="font-size:115%; font-weight:bold">${ans.blogname}</span><br>
//          <a href="${ans.link}" target="_blank" rel="noopener noreferrer" class="x_x" data-opened="0">${ans.title}</a> ${ans.jsttime}
//          </div>
//       </div>`
    }
)(100,5);
//)(5,5);

はてなブログのURLからOPMLファイルを生成する

はてなブログのURLは、私のブログを例にすると「memorandums.hatenablog.com」のような感じになります。この末尾にfeedとつけるとRSSフィードXMLが得られる仕様のようです。「memorandums.hatenablog.com/feed」という感じです。これはテキストエディタで編集しました。

で、OPMLファイルを生成するわけですが。。。調べてみると以外と勉強する必要がありそうで面倒だな。。。と。こんなときにはChatGPTくんに聞いてみるのが一番かと。とりあえず聞いてみるとそれっぽい答えが返ってきました。実行してinoreaderに取り込んで見るとタイトルが入ってないものがいくつかあって。。。せっかくRSSフィードを取得してもタイトルとか解析していないプログラムになっていました。そこでちょっとBeautifulSoupというスクレイピングライブラリで簡単に解析できるようでしたのでコードを追加して完成したのが以下です。feed_urls以下にさきほど取得したフィードURLをどんどん貼っていきます。このスクリプトを実行するとfeeds.opmlというファイルが生成されますので、そのファイルをinoreaderにインポートすれば終了です。

import requests
from bs4 import BeautifulSoup
import xml.etree.ElementTree as ET

def generate_opml(feed_urls):
    # OPMLのルート要素を作成
    root = ET.Element("opml")
    root.set("version", "1.0")
    head = ET.SubElement(root, "head")
    body = ET.SubElement(root, "body")

    # フィードURLごとにOPMLに追加
    for url in feed_urls:
        print(url)

        # URLからRSSフィードを取得
        response = requests.get(url)
        rss_feed = response.text
        soup = BeautifulSoup(rss_feed, 'html.parser')

        # RSSフィードを解析してOPMLに追加
        outline = ET.SubElement(body, "outline")
        outline.set("text", "RSS Feed")
        outline.set("title", soup.title.get_text())
        outline.set("type", "rss")
        outline.set("xmlUrl", url)

    # OPMLを文字列に変換
    opml_string = ET.tostring(root, encoding="utf-8")

    # OPMLファイルに書き込み
    with open("feeds.opml", "wb") as f:
        f.write(opml_string)

    print("OPMLファイルが生成されました。")

# テスト用の複数のURLリスト
feed_urls = [
  "https://memorandums.hatenablog.com/feed",
  "https://memorandums.hatenablog.com/feed",
  "https://memorandums.hatenablog.com/feed",
  "https://memorandums.hatenablog.com/feed",
  "https://memorandums.hatenablog.com/feed",
  "https://memorandums.hatenablog.com/feed"

]  # 実際のURLに置き換えてください

generate_opml(feed_urls)

さあ、最終ステップ。inoreaderに読み込むぞ!

inoreaderにアクセスして、インポート画面を開き、上記で生成したfeeds.opmlを指定し読み込ませようとしたら。。。無料アカウントは150フィードまでだけど大丈夫?というワーニングが。あ、そうそうそうだった。有料アカウントはどれくらいか見てみると年間契約すると月額150円くらい。これくらいならいいなと思い、30日お試しを申し込んだあと、再度インポートしました。

わくわくしながら結果をみると。。。「おや?」フィードがはてなブログのフィードだけになっている。。。あれ?新聞とかテックニュースとかこれまでGoogle ReaderFeedly→inoreaderと時代と興味に合わせて改善・最適化しつづけてきたフィード群がすべてきえてはてなブログだけになっていました。。。orz

覆水盆に返らず

何十年もITに関わってきました。数々の失敗をして痛い思いをしてきました。戻ることはないことは承知しています。しかもinoreaderのフィード情報はすべてクラウド。バックアップはしてません。ローカルファイルならDropboxに救われること(今は使っていませんがTime machineに救われたこと)もありません。

終了。。。

OPMLファイルが手製だったので。。。悪かったにせよ、元々のフィードが一切合切消えてしまうのは、やはりサービスとして欠陥じゃないかと思うんですね。。。何がどうなったのかわかりませんし。もし可能であれば戻してもらいたい。バックアップしていない私が悪いっちゃ悪いのですが。

ということで一縷の望みを懸けてinoreaderのお問い合わせに状況を書いて送りました。英語じゃないと受けつけないらしいのでDeepLを活用してできる限り状況を詳しく書いて送りました。今日は日曜日、2〜3営業日で返信があるかも、と書かれていましたので。。。期待したいところです。

元はと言えば購読リストの使いにくさにあります。そもそも記事を書く機能もnoteなどに比べると古めかしいです。それでもこの場所は気に入っているので使い続けています。何とか変わって欲しいなぁ。。。もしかするとプロアカウントにはあるのかもですが。。。

  • 記事を書くで、リンクを貼り込んだときの内容展開をもっと柔軟にしてほしい。現状はAmazonYoutubeなど貼る種別を書く側が区別して入れる必要があります。noteなどではURLを貼れば自動認識してその形式で記事に挿入してくれます。ぜひ。

  • 購読リストの管理画面が欲しい。今、どのブログを購読していて、それぞれどういう更新状況になっているのか。。。など、購読を見直す画面がありません。

  • 購読リストが読みにくい。更新記事を1つ1つチェックする作業を考えると、どこまで消化できているのかわかりませんし、1つチェックしてはリストに戻ってチェックするんも、特にスマホでは操作しにくいです。ぜひ。

■追記;当日夕方

娘が監督しているバレーチームの県大会予選を夫婦で見学にいき帰宅してからの追記です。inoreaderの方からは早速チケットが発行されたというメールがきてました。さすがIT企業という感じです。普通の人がチケットとか見ても何のことやら。。。でしょうけど。

で、やはりはてなブログはてなブログで見るしかないな。。。と購読リストをすべて戻しました。「購読する」のURLをwindow.openで開くようにすればAタグをクリックしなくていいんですね。。。知らなかった。とりあえずだいたい元に戻せたと思います。

あと、inoreaderの方は個々のはてなブログRSSを削除して、更新フィード用のRSSを1つだけinoreaderに登録しました。これならinoreaderも無料アカウントのまま継続できますね。問題は何も解決していませんが。。。とりあえず。

■追記2;2023/6/6

inoreaderの開発チームから以下の返信がありました。

As a Pro member of our service (you are of the free Pro trial), you have automated backups enabled. You can go to Preferences -> Import, Export, Backup -> Backups, and Restore and check for the back with the old feeds. More about that you can read here - https://www.inoreader.com/blog/2015/11/automatic-opml-backups.html.

The Inoreader Support team Best Regards, Rosen

戻ってきました。。。ありがとう。自動バックアップ機能があったとは。素晴らしすぎる。

ご覧の通り?、はてなブログのフィード情報は、ブログごとではなくはてなブログが生成したフィード情報1つになっています。なので、inoreaderをトライアル中のProアカウントが無料アカウントに戻っても使えます。しかも、「読者になる」ボタンを押せますので全体はわからないものの購読ブログの管理ははてな内ですることができますし、わずかではありますがブログを書いている方の応援にもなりますし。

inoreaderでのはてなブログ更新チェックはまあまあよいです。せっかくなので動画にしてみました。詳しくみたい場合にワンタップ操作が入るのがもう一歩という感じですが、はてなブログスマホ表示がブログのデザインによって異なりかなり見にくいブログもあるので、とりあえずinoreaderの独自(簡略?)レイアウトで記事をチェックして、詳しく見たかったら操作。。。というのはまあ悪くない体験と思います。慣れれば。

youtu.be

ご参考まで。