「利用者:夜泣き/スクリプト」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし
>Fet-Fe 編集の要約なし |
>夜泣き 編集の要約なし |
||
6行目: | 6行目: | ||
''' | ''' | ||
ver2.1. | ver2.1.3 2022/9/17恒心 | ||
当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です | 当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です | ||
42行目: | 42行目: | ||
import re | import re | ||
import json | import json | ||
from datetime import datetime, timezone | |||
from time import sleep | from time import sleep | ||
from typing import Final, NoReturn, TypeAlias | from typing import Final, NoReturn, TypeAlias | ||
63行目: | 64行目: | ||
##生きているのはhttps://github.com/zedeus/nitter/wiki/Instancesで確認 | ##生きているのはhttps://github.com/zedeus/nitter/wiki/Instancesで確認 | ||
##末尾にスラッシュ必須 | ##末尾にスラッシュ必須 | ||
NITTER_INSTANCE: Final[str] = 'http://ibsboeui2im5o7dxnik3s5yghufumgy5abevtij5nbizequfpu4qi4ad.onion/' | NITTER_INSTANCE: Final[str] = 'http://nitterqdyumlovt7tjqpdjrluitgmtpa53qq3idlpgoe4kxo7gs3xvad.onion/' | ||
#NITTER_INSTANCE: Final[str] = 'http://ibsboeui2im5o7dxnik3s5yghufumgy5abevtij5nbizequfpu4qi4ad.onion/' | |||
##archive.todayの魚拓 | ##archive.todayの魚拓 | ||
137行目: | 139行目: | ||
#関数類 | #関数類 | ||
def __init__(self, krsw: bool=False): | def __init__(self, krsw: bool=False): | ||
self._txt_data: str = | self._txt_data: list[str] = [] | ||
self._limit_count: int = 0 ##記録数 | self._limit_count: int = 0 ##記録数 | ||
167行目: | 169行目: | ||
self._stop: Final[str] = self._stop_word() | self._stop: Final[str] = self._stop_word() | ||
##日付取得 | |||
self._date = self._tweet_date(BeautifulSoup(self._page.text, 'html.parser').find(class_='timeline-item')) | |||
self._txt_data.append('') | |||
print() | print() | ||
177行目: | 182行目: | ||
##失敗かどうかは呼出側で要判定 | ##失敗かどうかは呼出側で要判定 | ||
def _request_once(self, url: Final[str]) -> Response: | def _request_once(self, url: Final[str]) -> Response: | ||
res: Response = requests.get(url, timeout=self.REQUEST_TIMEOUT, headers=self.HEADERS, allow_redirects=False | res: Response = requests.get(url, timeout=self.REQUEST_TIMEOUT, headers=self.HEADERS, allow_redirects=False) | ||
sleep(self.WAIT_TIME) ##DoS対策で待つ | sleep(self.WAIT_TIME) ##DoS対策で待つ | ||
return res | return res | ||
287行目: | 292行目: | ||
def _fail(self) -> NoReturn: | def _fail(self) -> NoReturn: | ||
print("接続失敗しすぎで強制終了ナリ") | print("接続失敗しすぎで強制終了ナリ") | ||
if self._txt_data | if len(self._txt_data) > 0: ##取得成功したデータがあれば発行 | ||
print("取得成功した分だけ発行しますを") | print("取得成功した分だけ発行しますを") | ||
self._make_txt() | self._make_txt() | ||
else: | else: | ||
exit(1) ##終了 | exit(1) ##終了 | ||
##self._txt_dataにwikiでテーブル表示にするためのタグをつける | |||
def _text_table(self) -> None: | |||
self._txt_data[0] = '{|class="wikitable" style="text-align: left;"\n' + self._txt_data[0] + '|}' | |||
##テキスト発行 | ##テキスト発行 | ||
def _make_txt(self) -> NoReturn: | def _make_txt(self) -> NoReturn: | ||
result_txt: Final[str] = ' | self._next_day() | ||
result_txt: Final[str] = '\n'.join(self._txt_data) ##リストを合体 | |||
##ファイル出力 | ##ファイル出力 | ||
with codecs.open('tweet.txt', 'w', 'utf-8') as f: | with codecs.open('tweet.txt', 'w', 'utf-8') as f: | ||
321行目: | 331行目: | ||
else: | else: | ||
return False | return False | ||
##ツイートの日付を取得 | |||
def _tweet_date(self, tweet: bs4.element.Tag) -> datetime: | |||
date_str = tweet.find(class_='tweet-date').a['title'] | |||
date = datetime.strptime(date_str, '%b %d, %Y · %I:%M %p UTC').replace(tzinfo=timezone.utc) | |||
return date | |||
#self._dateの日付のツイートがなくなったときの処理 | |||
def _next_day(self, date: datetime | None = None) -> None: | |||
self._text_table() | |||
self._txt_data[0] = self._date.strftime('=== %m月%d日 ===\n') + self._txt_data[0] | |||
print(self._date.strftime('%m月%d日のツイートを取得完了ですを')) | |||
if date is not None: | |||
self._txt_data.insert(0,'') | |||
self._date = date | |||
def _get_tweet_media(self, tweet: bs4.element.Tag) -> str: | def _get_tweet_media(self, tweet: bs4.element.Tag) -> str: | ||
364行目: | 389行目: | ||
continue | continue | ||
tweet_url: str = self.TWITTER_URL + re.sub('#[^#]*$', '', tweet.find(class_='tweet-link').get('href')) ##ツイートのURL作成 | tweet_url: str = self.TWITTER_URL + re.sub('#[^#]*$', '', tweet.find(class_='tweet-link').get('href')) ##ツイートのURL作成 | ||
date = self._tweet_date(tweet) | |||
if date.year != self._date.year or date.month != self._date.month or date.day != self._date.day: | |||
self._next_day(date) | |||
archived_tweet_url: str = self._callinshowlink_url(tweet_url) ##ツイートURLをテンプレートCallinShowlinkに変化 | archived_tweet_url: str = self._callinshowlink_url(tweet_url) ##ツイートURLをテンプレートCallinShowlinkに変化 | ||
tweet_content: bs4.element.Tag = tweet.find(class_='tweet-content media-body') ##ツイートの中身だけ取り出す | tweet_content: bs4.element.Tag = tweet.find(class_='tweet-content media-body') ##ツイートの中身だけ取り出す | ||
369行目: | 397行目: | ||
media_txt: str = self._get_tweet_media(tweet) ##ツイートに画像などのメディアを追加 | media_txt: str = self._get_tweet_media(tweet) ##ツイートに画像などのメディアを追加 | ||
quote_txt: str = self._get_tweet_quote(tweet) ##引用リツイートの場合、元ツイートを追加 | quote_txt: str = self._get_tweet_quote(tweet) ##引用リツイートの場合、元ツイートを追加 | ||
self._txt_data = '!' + archived_tweet_url + '\n|-\n|\n' \ | self._txt_data[0] = '!' + archived_tweet_url + '\n|-\n|\n' \ | ||
+ self._escape_wiki_reserved_words(tweet_content.get_text()) \ | + self._escape_wiki_reserved_words(tweet_content.get_text()) \ | ||
+ quote_txt + media_txt + '\n|-\n' \ | + quote_txt + media_txt + '\n|-\n' \ | ||
+ self._txt_data ##wikiの文法に変化 | + self._txt_data[0] ##wikiの文法に変化 | ||
self._limit_count += 1 ##記録回数をカウント | self._limit_count += 1 ##記録回数をカウント | ||
if self._limit_count % self.REPORT_INTERVAL == 0: | if self._limit_count % self.REPORT_INTERVAL == 0: | ||
484行目: | 512行目: | ||
== 実行例 == | == 実行例 == | ||
20件での実行例。 | 20件での実行例。 | ||
=== 09月14日 === | |||
{|class="wikitable" style="text-align: left;" | {|class="wikitable" style="text-align: left;" | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570070806964862977|2=https://archive.ph/DUQA1}} | ||
|- | |- | ||
| | | | ||
<nowiki>#</nowiki>一律現金十万円給付金を最優先に <br> | |||
<br> | |||
これは明らかに無駄だから1人親支援、学生の奨学金についての返還債務を減らすことに使おう。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570078142018244610|2=https://archive.ph/5PadJ}} | ||
|- | |- | ||
| | | | ||
誹謗中傷は良くない。<br> | |||
{{Archive|1=https://twitter.com/ | {{Archive|1=https://twitter.com/ota324/status/1570005982666960897|2=https://archive.ph/Gak9f|3=https://twitter.com/ota324/status/1570005982666960897}} | ||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | |} | ||
=== 09月15日 === | |||
{|class="wikitable" style="text-align: left;" | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570207381098999808|2=https://archive.ph/DrAbJ}} | |||
|- | |- | ||
| | | | ||
{{Archive|1=https://www.amazon.co.jp/祇園ばんや【ぬかの花スタートセット〈小〉1-2人用】食べられる美味しいぬか床セット-有機JAS米使用-14種の贅沢素材-半年以上熟成-京都・祇園料亭の味/dp/B00BIV1R34?ref_=ast_sto_dp|2=https://archive.ph/pgThW|3=https://www.amazon.co.jp/祇園ばんや【ぬかの花スタートセット〈小〉1-2人用】食べられる美味しいぬか床セット-有機JAS米使用-14種の贅沢素材-半年以上熟成-京都・祇園料亭の味/dp/B00BIV1R34?ref_=ast_sto_dp}}<br> | |||
{{Archive|1=https:// | <br> | ||
最近、これ買ってぬか漬け作ってるんだけど、ぬか漬けってコストパフォーマンス最高。<br> | |||
<br> | <br> | ||
つけといたら、1日で漬物できてて、夜つまめる。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570394937958727681|2=https://archive.ph/6bdnx}} | ||
|- | |- | ||
| | | | ||
KADOKAWAはコンプライアンスをちゃんとした方がいいよね。<br> | |||
<br> | <br> | ||
会社として。<br> | |||
<br> | <br> | ||
第三者委員会作って調査した方がいいよ。<br> | |||
{{Archive|1=https://twitter.com/news24ntv/status/1569939142670417922|2=https://archive.ph/gHf0C|3=https://twitter.com/news24ntv/status/1569939142670417922}} | |||
{{Archive|1=https://twitter.com/ | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570395927323770880|2=https://archive.ph/xTROh}} | ||
|- | |- | ||
| | | | ||
今日も濃い1日だよ。<br> | |||
<br> | |||
何だろうな。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570396210443452417|2=https://archive.ph/odbDG}} | ||
|- | |- | ||
| | | | ||
きゅうり買って帰ろうとしてたのに、まだ帰れない。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570396604963913728|2=https://archive.ph/rlaFL}} | ||
|- | |- | ||
| | | | ||
{{Archive|1=https:// | マスコミから取材の話がありましたが、僕はKADOKAWAと一切関係がないので、連絡してこないでください。<br> | ||
{{Archive|1=https://twitter.com/CallinShow/status/1570394937958727681|2=https://archive.ph/6bdnx|3=https://twitter.com/CallinShow/status/1570394937958727681}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570397049245560834|2=https://archive.ph/HhOUw}} | ||
|- | |- | ||
| | | | ||
色々ありすぎて疲れてるけど、何だか脳は活性化するのって何なんだろうな。<br> | |||
<br> | <br> | ||
アドレナリンってやつだな。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570397072570085382|2=https://archive.ph/fnDoF}} | ||
|- | |- | ||
| | | | ||
弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | 弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | ||
<nowiki>#</nowiki>マシュマロを投げ合おう<br> | <nowiki>#</nowiki>マシュマロを投げ合おう<br> | ||
{{Archive|1=https://marshmallow-qa.com/apt/ | {{Archive|1=https://marshmallow-qa.com/apt/79c915f6-e889-4765-8dbb-cca0b6cea262|2=https://archive.ph/U55Qp|3=https://marshmallow-qa.com/apt/79c915f6-e889-4765-8dbb-cca0b6cea262}} | ||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570466085534838785|2=https://archive.ph/vUWjo}} | ||
|- | |- | ||
| | | | ||
ようやく1日が終わる。<br> | |||
<br> | |||
明日7時起き、やばいな。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570466373406707713|2=https://archive.ph/suecX}} | ||
|- | |- | ||
| | | | ||
仕事に追われ、こんな毎日です。。。<br> | |||
{{Archive|1=https://twitter.com/kokueisecom/status/1570466219643502592|2=https://archive.ph/r6WIp|3=https://twitter.com/kokueisecom/status/1570466219643502592}} | |||
{{Archive|1=https://twitter.com/ | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570467186497716224|2=https://archive.ph/iNx2m}} | ||
|- | |- | ||
| | | | ||
ありがとう❗️❗️<br> | |||
{{Archive|1=https://twitter.com/kokueisecom/status/1570467045560713216|2=https://archive.ph/ntkky|3=https://twitter.com/kokueisecom/status/1570467045560713216}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570468251448250369|2=https://archive.ph/WicE5}} | ||
|- | |- | ||
| | | | ||
内容証明書かないとな。<br> | |||
{{Archive|1=https://twitter.com/CallinShow/status/1570467429033316352|2=https://archive.ph/wESfJ|3=https://twitter.com/CallinShow/status/1570467429033316352}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570468936298426370|2=https://archive.ph/yKcg7}} | ||
|- | |- | ||
| | | | ||
今日はブラックIT企業の未払い残業代の話の相談があって、若い人からの搾取やばいよな。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | |} | ||
=== 09月16日 === | |||
{|class="wikitable" style="text-align: left;" | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570807392899829760|2=https://archive.ph/https://twitter.com/CallinShow/status/1570807392899829760}} | |||
|- | |- | ||
| | | | ||
弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | |||
{{Archive|1=https:// | <nowiki>#</nowiki>マシュマロを投げ合おう<br> | ||
{{Archive|1=https://marshmallow-qa.com/apt/d4905b12-9dcf-4f81-af54-b6c3e5237007|2=https://archive.ph/https://marshmallow-qa.com/apt/d4905b12-9dcf-4f81-af54-b6c3e5237007|3=https://marshmallow-qa.com/apt/d4905b12-9dcf-4f81-af54-b6c3e5237007}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570878373873995779|2=https://archive.ph/bbED7}} | ||
|- | |- | ||
| | | | ||
土曜日中京5R<br> | |||
<br> | <br> | ||
◎マイド<br> | |||
<br> | |||
中山5R<br> | |||
<br> | |||
◎スノードーム | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | |} | ||
=== 09月17日 === | |||
{|class="wikitable" style="text-align: left;" | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570983261572329472|2=https://archive.ph/fIArg}} | |||
|- | |- | ||
| | | | ||
今のところ全て的中<br> | |||
<br> | <br> | ||
後は中京8レースのみ<br> | |||
[[ファイル:Fc1AvL6aAAALVhw.jpg|240px]] | |||
|- | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570983442170642434|2=https://archive.ph/gLfrX}} | |||
|- | |||
| | |||
{{Archive|1=https://twitter.com/CallinShow/status/ | 早起きおじさんです。<br> | ||
{{Archive|1=https://twitter.com/CallinShow/status/1570983261572329472|2=https://archive.ph/fIArg|3=https://twitter.com/CallinShow/status/1570983261572329472}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570985131527262212|2=https://archive.ph/Tde3Z}} | ||
|- | |- | ||
| | | | ||
教育委員会ちゃんとしなきゃだめだろ。<br> | |||
{{Archive|1=https://twitter.com/takigare3/status/1570737878128529408|2=https://archive.ph/k4nim|3=https://twitter.com/takigare3/status/1570737878128529408}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571039304834777091|2=https://archive.ph/HkTO9}} | ||
|- | |- | ||
| | | | ||
{{Archive|1=https://youtu.be/bVn0GSysmcI|2=https://archive.ph/https://youtu.be/bVn0GSysmcI|3=https://youtu.be/bVn0GSysmcI}}<br> | |||
<br> | <br> | ||
株式会社エンリケ空間の代表取締役だから、知らないでは済まない。<br> | |||
債権者に今提示されている書類は、色々ツッコミどころがある。 | |||
|- | |- | ||
|} | |} |