というわけでプログラムではてぶを抽出します。
クソ仕様ですw
ブログのURLから日付を取得してるので日付と6桁の値がURL末尾に入らないブログでは使えないor誤動作するっすw
三日はてブを45日くらいにして出力ちょっと弄ってる。いうなれば「月はてブ」。
汚いコードだけど何かの参考になれば幸い
html出力といいつつはてなブログに貼り付けることを考えた出力のため改行など追加してください。
出力
htmlだと
黄色の部分に改行入らない。
ソースを表示してもらえれば
コピペでブログに貼り付けれるっす。
するとエントリのタイトルやアイコンが表示されてIDコールが乱れ飛びますwww
お気をつけてwww
コード
# -*- coding:utf-8 -*- import urllib import urllib.request import json import datetime as dt import sys from bs4 import BeautifulSoup # HTML出力 def HtmlOutput(bmInfos): f = open('月はてブ.html', 'ab') tableStr = f'<h3>{bmInfos[0]["url"]}</h3>\n' tableStr += f'[{bmInfos[0]["url"]}:title]\n' for b in bmInfos: bUrl = b['url'].replace("http://", "") bUrl = b['url'].replace("https://", "s/") bUrl = urllib.parse.quote(bUrl) if b['star'] == 1: tableStr += '★' tableStr += f'<img src="https://cdn.profile-image.st-hatena.com/users/{b["user"]}/profile_s.gif">id:{b["user"]}' tableStr += f' {b["date"].strftime("%Y/%m/%d")}\n' tableStr += f'{b["comment"]}\n' html = f""" {tableStr} """ f.write(html.encode('utf-8')) f.close() # 入力したはてなIDがスター(黄)つけているか # 0: はてなスターをつけていない # 1: はてなスターをつけている def GetImgIndex(time, eid, user): # URL作成 url = f'http://b.hatena.ne.jp/{user}/' url += time.strftime("%Y%m%d") url += "#bookmark-" + str(eid) url = urllib.parse.quote(url) # アクセス(エンコードしない) r = urllib.request.urlopen("http://s.hatena.com/entry.json?uri=" + url).read() # jsonに変換 jsonStr = json.loads(r) for st in jsonStr['entries']: for st2 in st['stars']: if st2['name'] == myId: return 1 return 0 # ---メイン処理ここから--ー # 検索値、ユーザーID入力 myStr = input("検索したいurl: ") myId = input("あなたのはてなID: ") if myStr == "" or myId == "": print("なんか入れて") sys.exit() if myId.encode('utf-8').isalnum(): if len(myId) > 15: print("長すぎる") sys.exit() else: print("半角英数以外") sys.exit() f = open('月はてブ.html', 'wb') html = f""" <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> """ f.write(html.encode('utf-8')) f.close() pageCount = 0 endflg = False while True: r = urllib.request.urlopen("http://b.hatena.ne.jp/search/text?safe=off&q=" + urllib.parse.quote(myStr, '') +\ "&users=1&of=" + str(pageCount * 40)).read() pageCount += 1 soup = BeautifulSoup(r, 'lxml') for a in soup.find_all("a", attrs={"class": "capture"}): bmInfos = [] targetURL=a.get("href") tmpD = targetURL[len(targetURL)-17:] try: chkD = dt.datetime.strptime(tmpD[:10], '%Y/%m/%d') except: continue if chkD < (dt.datetime.now() - dt.timedelta(days=45)): endflg = True break r = urllib.request.urlopen("http://b.hatena.ne.jp/entry/jsonlite/?url=" + urllib.parse.quote(targetURL, '')).read() jsonStr = json.loads(r) for bm in jsonStr['bookmarks']: tdatetime = dt.datetime.strptime(bm['timestamp'], '%Y/%m/%d %H:%M:%S') if tdatetime > (dt.datetime.now() - dt.timedelta(days=45)): if bm['comment'] != "": bmInfo = {"star": GetImgIndex(tdatetime, jsonStr['eid'], bm['user']), "url": jsonStr['url'], "user": bm['user'], "date": tdatetime, "comment": bm['comment']} bmInfos.append(bmInfo) if len(bmInfos) > 0: HtmlOutput(bmInfos) if endflg: break f = open('月はてブ.html', 'ab') html = f""" </body> </html> """ f.write(html.encode('utf-8')) f.close() print("END")