スナックelve 本店

バツイチ派遣40代女性の日記です

三日はてブ移植

前、C#

三日間分の被ブクマをチェックするアプリ

No.1206 やりたいこと - ダメシ添加大戦

みたいなものを作っていたのでpythonで同じ事をしようと思った。

うーん、実はエラー出る。どっかでエンコードしないといけないみたいだけどよくわからないからとりあえず公開してみようw
検索できるのは半角英数のみかなぁ? この辺もなんかすれば何とかなりそうだけど、飽きてきたのでとりあえず出力されるしーという言い訳で放出。
もうちょっと勉強したら直すかも。
あ、記事タイトルのナンバリングはやめました(爆)ダイアリとブログで重複してる記事もあるしなぁ。

アドバイスとかあれば是非是非ー(;´Д`)
滅茶遅いし、エラー出るしなのでもっとどうにかしないといけない。

myStr="https://elve.hatenadiary.jp/"
myId = "elve"

ここをご自分のサイトのurlとIDに変えて実行していただくと
三日はてブ.html
ってファイルを作成します
f:id:elve:20180331003406p:plain
一番左は自分がスター(黄色)付けたかどうかの表示です。

# -*- coding:utf-8 -*-
import urllib
import requests
import json
from lxml import etree
import datetime as dt

 
def HtmlOutput (bmInfos):
    f = open('三日はてブ.html','wt')
    f.write('<html><body><table>')
    f.write('<tr><th>★</th><th>URL</th><th>ユーザー</th><th>日付</th><th>コメント</th>\n')
    for b in bmInfos:
        bUrl = b['url'].replace("http://", "")
        bUrl = b['url'].replace("https://", "s/")
        bUrl = urllib.parse.quote(bUrl)
        
        f.write('<tr>')
        f.write('<td>')
        if b['star']==1:
            f.write('★')
        f.write('</td>')
        f.write('<td><a href="http://b.hatena.ne.jp/entry/' + bUrl + '" target="_blank">' + b['url'] + '</a></td><td>' + \
        b['user'] + '</td><td>' + b['date'].strftime("%Y/%m/%d") + '</td><td>' + b['comment'] + '</td>')
        f.write('</tr>\n')
    f.write('</table></body></html>')
    f.close()

def  GetImgIndex(time, eid, user):
    #URL作成
    url = "http://b.hatena.ne.jp/" + user + "/"
    url = url + time.strftime("%Y%m%d") 
    url = url + "#bookmark-" + str(eid)
    url = urllib.parse.quote(url)
    headers = {'User-Agent': 'Sample Header'}
    r = requests.get("http://s.hatena.com/entry.json?uri=" + url, headers=headers).json()
    for st in r['entries']:
        for st2 in st['stars']:
            if st2['name'] == myId:
                return 1
    return 0

myStr="https://elve.hatenadiary.jp/"
myId = "elve"
#myStr = input("検索したいurl: ")
#myId = input("あなたのはてなID: ")
r = requests.get("http://b.hatena.ne.jp/search/text?safe=off&q=" + urllib.parse.quote(myStr) + "&users=1&mode=rss").text
r = r.encode('utf-8')
root = etree.fromstring(r)

links = root.findall(".//{http://purl.org/rss/1.0/}link")
#links = root.xpath('link', namespaces={'rss','{http://purl.org/rss/1.0/}'})
bmInfos=[]
for link in  links:
    if link != links[0]:
        headers = {'User-Agent': 'Sample Header'}
        json = requests.get("http://b.hatena.ne.jp/entry/jsonlite/?url=" + link.text, headers=headers).json()
        try:
            for bm in json['bookmarks']:
                tdatetime = dt.datetime.strptime(bm['timestamp'], '%Y/%m/%d %H:%M:%S')
                if tdatetime > (dt.datetime.now() - dt.timedelta(days = 3)):
                    bmInfo={"star":0,"url":json['url'],"user":bm['user'], "date":tdatetime,"comment":bm['comment']}
                    bmInfo["star"] = GetImgIndex(tdatetime, json['eid'], bm['user'])
                    bmInfos.append(bmInfo)
                else:
                    break                    
        except:
            print("ERR!!")
            break
HtmlOutput(bmInfos)
print("END")