Skip to content

Instantly share code, notes, and snippets.

@hasitanai
Last active March 28, 2018 05:24
Show Gist options
  • Save hasitanai/4a5123333d879470b19702efa4742543 to your computer and use it in GitHub Desktop.
Save hasitanai/4a5123333d879470b19702efa4742543 to your computer and use it in GitHub Desktop.
絶対画像収集するマン
from mastodon import *
import re, sys, os, csv, json, codecs, io, gc
import threading, requests
import warnings, traceback
from urllib.request import urlretrieve
from xml.sax.saxutils import unescape as unesc
# これはよく分かってない
warnings.simplefilter("ignore", UnicodeWarning)
url_ins = open("instance.txt").read() # instanceのアドレスお願いね 例:https://knzk.me
mastodon = Mastodon(
client_id="cred.txt",
access_token="auth.txt",
api_base_url=url_ins) # インスタンス
class Re1():
def text(text):
return (re.sub('<p>|</p>|<a.+"tag">|<a.+"_blank">|<a.+mention">|<span>|</span>|</a>|<span class="[a-z-]+">', "",
str(text)))
class Log():
def __init__(self, status):
self.account = status["account"]
self.mentions = status["mentions"]
self.content = unesc(Re1.text(status["content"]))
self.non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
def read(self):
name = self.account["display_name"]
acct = self.account["acct"]
non_bmp_map = self.non_bmp_map
print(str(name).translate(non_bmp_map) + "@" + str(
acct).translate(self.non_bmp_map))
print(str(self.content).translate(non_bmp_map))
print(str(self.mentions).translate(non_bmp_map))
def write(self):
text = self.content
acct = self.account["acct"]
f = codecs.open('log\\' + 'log_' + nowing + '.txt', 'a', 'UTF-8')
f.write(re.sub('<br />', '\\n', str(text)) + ',<acct="' + acct + '">\r\n')
f.close()
class Local(StreamListener): # ここではLTLを監視する継承クラスになります。
def on_update(self, status): # StreamingAPIがリアルタイムにトゥート情報を吐き出してくれます。
print("===○local_on_update○===")
log = threading.Thread(Log(status).read())
log.run()
bot.media(status)
pass
class bot():
def media(status): # 画像監視機能つけてみました
account = status["account"]
if account["acct"] != "016": # 自分以外
if status["media_attachments"] == []:
pass
else:
print(status["media_attachments"])
atta = status["media_attachments"]
for x in range(0, len(atta)):
if status["media_attachments"][x]:
print(x)
media = status["media_attachments"][x]
#if media["type"] == "image":
print("☆Hit={}".format(str(status["id"])))
media_url = media["url"]
ext = os.path.splitext(media_url)[1][:4]
if not ext:
ext = ".jpg"
filename = "@{acct};{media_id}_{x}{ext}".format(acct=account["acct"],
media_id=str(media["id"]),
x=x,
ext=ext)
urlretrieve(media_url,"media\\{0}".format(filename))
print("◇getted media_{}".format(str(x)))
return
class count():
dev_mode = False
if __name__ == '__main__': # ファイルから直接開いたら動くよ!
listener = Local()
mastodon.local_stream(listener)
s.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment