3日はてブ Unicode 文字対応

ブクマされても通知が来ない日々が続いておりますが皆様いかがお過ごしですか?

snack.elve.club

このままだと

にゃーん😺

で死ぬwww

open()関数に encoding キーワード引数を与えてやると、自動変換で使用される文字コードを直接指定することができますから、これを Unicode 文字が表現できる UTF-8 等にしてやればいいわけです。

# UTF-8 を指定してファイルを出力する
f = open(‘all_names.csv‘, ‘w’, encoding=’UTF-8‘)

Python エラー'cp932' codec can't encode character – スタック・オーバーフロー

というわけで対応した。

open書いたらすぐ文字コード! って思えるようにならんと駄目よねー。

コード

# -*- coding:utf-8 -*-
import urllib
import requests
import json
from lxml import etree
import datetime as dt
def HtmlOutput (bmInfos):
f = open('三日はてブ.html','wt', encoding='UTF-8')
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="elve.club"
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')
if tdatetime > (dt.datetime.now() - dt.timedelta(days=10)):
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")

出力

f:id:elve:20181208073216p:plain

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

1件のコメント

  • 駄目だ、月はてブは動かん!(ノД`)シクシク

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です