何を消費するにも時間が不足している現代社会、Webクリップもその例外ではありません。
今回はWebクリップのリンク一覧htmlで吐き出し→Pythonで出力し順番をランダムにして並べ替えたいと思います。
きっかけ
本も録画番組もゲームも溜まっている私。Web記事も例外ではありません。はてブの「後で読む」タグにもWebクリップサービス、Pocketにも1000以上の記事が溜まっています。 積読ならぬ積記事です。
全てを読めないにしてもせめて読む努力はしたい。 そんな気持ちからPocketやはてブを開くと困ることが。
新しい記事しか見当たりません。。。
Pocketの方はソートをすることができますがOldest first かnewest firstしかありません。記事が1000もあるとPocketは下まで永遠にスクロール。はてブの方は次へボタンを押しまくることになります。
そんなことまでして昔の記事を読みには行かないでしょう。
そうなると以下のようなことを思うわけです。
自分が保存しておいた記事から適当にランダムな記事を選び出してくれないかなあ? しかもPocketとはてブの区別なく。
残念ながらそういったニッチなサービスはありません。しかし記事一覧をhtml形式で吐き出すことが、はてブでもPocketでもできるようです。
であればそのhtmlを解析→タイトルとURLを取得→ランダムに並び替えてcsvかなんかに張り付け→やりたいこと実現! の流れになりそう。
Pythonで書けそうであったのでやってみました。
まずはhtmlファイルの出力
下記ページから行けます
Pocket: Log In
はてブ
こちらは下記ページのデータ管理→エクスポート、から ブックマーク形式で問題ありません
出力結果
こんな感じになりました。まさしく私の欲しかったものそのものです。
記事数は2400も行ってますか。。気になったものを読んでいこう。
CSVだとできないけどxlsx形式にしてhyperlink関数を使えばハイパーリンクになるよ。
これでクリックするだけで記事にも飛べて非常に便利!
一覧もずいぶんコンパクトになったので気になる記事をクリック!
ソースコード
htmlファイルを出力したらローカルの適当な場所に入れてプログラムを実行します。
#------- from bs4 import BeautifulSoup import bs4 import requests import csv import random def Pocket(): #------------------------Pocket--------------------- # ローカルファイルのhtmlから読み込む load_url = r"C:\Users\xxxx\xxxx\yyy.Pocket.html" #htmlファイルの場所 #htmlを解析 soup = bs4.BeautifulSoup(open(load_url, encoding="utf-8"), 'html.parser') links = soup.find_all('li') # 全てのタグ要素を取得,Pocketとはてなでタグが違うので分ける atags = soup.find_all('a') # 全てのタグ要素を取得 li_list = [] # 配列を作成 ataglist = [] # 配列を作成 i=0 for link in links: # その中のliタグの文字列を表示 sample_txt = link.text li_list.append(sample_txt) i+=1 for atag in atags: # その中のaタグのhrefを表示、リンクの部分 atag_txt = atag.get('href') ataglist.append(atag_txt) #ランダム配列の作成 my_list = list(range(0, i)) my_list_shuffled = random.sample(my_list, len(my_list)) #ランダム配列合成 m=n=o=0 rlist = [[0 for m in range(2)] for n in range(i)] #2つ毎の配列[タイトル,URL]に変更する for o in my_list_shuffled: t=my_list_shuffled[o] rlist[o][1]=ataglist[o] rlist[o][0]=li_list[o] #-------------------------はてブ-------------------- # ローカルファイルのhtmlから読み込む load_urlHatena = r"C:\Users\xxxx\xxxx\zzz.bookmarks.html" #htmlファイルの場所 soupHatena = bs4.BeautifulSoup(open(load_urlHatena, encoding="utf-8"), 'html.parser') linksHatena = soupHatena.find_all('a') # 全てのタグ要素を取得,Pocketとはてなでタグが違うので分ける atagsHatena = soupHatena.find_all('a') # 全てのタグ要素を取得 li_listHatena = [] # 配列を作成 ataglistHatena = [] # 配列を作成 j=0 for link in linksHatena: # その中のliタグの文字列を表示 sample_txtHatena = link.text li_listHatena.append(sample_txtHatena) j+=1 for atag in atagsHatena: # その中のaタグのhrefを表示、リンクの部分 atag_txtHatena = atag.get('href') ataglistHatena.append(atag_txtHatena) #----------------ランダム配列の作成----------------------------- my_listHatena = list(range(0, j)) my_list_shuffledHatena = random.sample(my_listHatena, len(my_listHatena)) #ランダム配列合成 m=n=o=0 rlistHatena = [[0 for m in range(2)] for n in range(j)] #2つ毎の配列[タイトル,URL]に変更する for o in my_list_shuffledHatena: rlistHatena[o][1]=ataglistHatena[o] rlistHatena[o][0]=li_listHatena[o] #--------------------------------------------- #ここからランダム化 listMarge = [] # 配列を作成 listMarge.extend(rlist) listMarge.extend(rlistHatena) print(len(listMarge)) rlist_shuffled = random.sample(listMarge, len(listMarge)) #utf_8_sigで書けばエンコードできる,csvは書き込みモード f = open("output.csv", mode="w", newline="", encoding='utf_8_sig') writer = csv.writer(f) for data in rlist_shuffled: writer.writerow(data) f.close() Pocket() #メイン関数 #-------