「利用者:夜泣き/スクリプト」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし
>夜泣き (タイムゾーンの設定忘れ) |
>Fet-Fe 編集の要約なし |
||
6行目: | 6行目: | ||
''' | ''' | ||
ver2.1. | ver2.1.4 2022/9/22恒心 | ||
当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です | 当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です | ||
42行目: | 42行目: | ||
import re | import re | ||
import json | import json | ||
from datetime import datetime | from datetime import datetime | ||
from zoneinfo import ZoneInfo | |||
from time import sleep | from time import sleep | ||
from typing import Final, NoReturn, TypeAlias | from typing import Final, NoReturn, TypeAlias | ||
from urllib.parse import quote, unquote | from urllib.parse import quote, unquote, urljoin | ||
import warnings | import warnings | ||
import requests | import requests | ||
import bs4 | import bs4 | ||
66行目: | 66行目: | ||
##末尾にスラッシュ必須 | ##末尾にスラッシュ必須 | ||
NITTER_INSTANCE: Final[str] = 'http://nitterqdyumlovt7tjqpdjrluitgmtpa53qq3idlpgoe4kxo7gs3xvad.onion/' | NITTER_INSTANCE: Final[str] = 'http://nitterqdyumlovt7tjqpdjrluitgmtpa53qq3idlpgoe4kxo7gs3xvad.onion/' | ||
##archive.todayの魚拓 | ##archive.todayの魚拓 | ||
79行目: | 78行目: | ||
##twitterのURL | ##twitterのURL | ||
## | ##末尾にスラッシュ必須 | ||
TWITTER_URL: Final[str] = 'https://twitter.com' | TWITTER_URL: Final[str] = 'https://twitter.com/' | ||
##降臨ショーのユーザーネーム | ##降臨ショーのユーザーネーム | ||
157行目: | 156行目: | ||
if krsw: | if krsw: | ||
print('クエリは自動的になしにナリます') | print('クエリは自動的になしにナリます') | ||
self._page: Response | None = self._request(self.NITTER_INSTANCE | self._page: Response | None = self._request(urljoin(self.NITTER_INSTANCE, self.SEARCH_QUERY + name)) | ||
if self._page is None: | if self._page is None: | ||
self._fail() | self._fail() | ||
171行目: | 170行目: | ||
##日付取得 | ##日付取得 | ||
self._date = self._tweet_date(BeautifulSoup(self._page.text, 'html.parser').find(class_='timeline-item')) | self._date: datetime = self._tweet_date(BeautifulSoup(self._page.text, 'html.parser').find(class_='timeline-item')) | ||
self._txt_data.append('') | self._txt_data.append('') | ||
print() | print() | ||
183行目: | 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, proxies=self.PROXIES) | ||
sleep(self.WAIT_TIME) ##DoS対策で待つ | sleep(self.WAIT_TIME) ##DoS対策で待つ | ||
return res | return res | ||
208行目: | 207行目: | ||
##URLの最後にスラッシュ付いていなければ付ける | ##URLの最後にスラッシュ付いていなければ付ける | ||
def _check_slash(self) -> None | NoReturn: | def _check_slash(self) -> None | NoReturn: | ||
if self.NITTER_INSTANCE[-1] != '/': | if self.NITTER_INSTANCE[-1] != '/': | ||
216行目: | 214行目: | ||
if self.ARCHIVE_TODAY_STANDARD[-1] != '/': | if self.ARCHIVE_TODAY_STANDARD[-1] != '/': | ||
raise RuntimeError('ARCHIVE_TODAY_STANDARDの末尾には/が必須です') | raise RuntimeError('ARCHIVE_TODAY_STANDARDの末尾には/が必須です') | ||
if self.TWITTER_URL[-1] | if self.TWITTER_URL[-1] != '/': | ||
raise RuntimeError('TWITTER_URLの末尾には/ | raise RuntimeError('TWITTER_URLの末尾には/が必須です') | ||
##Torが使えているかチェック | ##Torが使えているかチェック | ||
258行目: | 256行目: | ||
return self.CALLINSHOW | return self.CALLINSHOW | ||
else: | else: | ||
res: Response | None = self._request(self.NITTER_INSTANCE | res: Response | None = self._request(urljoin(self.NITTER_INSTANCE, account_str)) ##リクエストして結果取得 | ||
if res is None : ##リクエスト失敗判定 | if res is None : ##リクエスト失敗判定 | ||
self._fail() | self._fail() | ||
279行目: | 277行目: | ||
query_str.append(quote(query_input)) | query_str.append(quote(query_input)) | ||
query_input = input() | query_input = input() | ||
res: Response | None = self._request(self.NITTER_INSTANCE | print("検索クエリでリクエストしているナリ……") | ||
res: Response | None = self._request(urljoin(self.NITTER_INSTANCE, self.SEARCH_QUERY + '+'.join(query_str))) ##リクエストして結果取得 | |||
if res is None : ##リクエスト失敗判定 | if res is None : ##リクエスト失敗判定 | ||
self._fail() | self._fail() | ||
300行目: | 299行目: | ||
##self._txt_dataにwikiでテーブル表示にするためのタグをつける | ##self._txt_dataにwikiでテーブル表示にするためのタグをつける | ||
def | def _convert_to_text_table(self, text) -> str: | ||
return '{|class="wikitable" style="text-align: left;"\n' + text + '|}' | |||
##テキスト発行 | ##テキスト発行 | ||
322行目: | 321行目: | ||
def _download_media(self, media_name: Final[str]) -> bool: | def _download_media(self, media_name: Final[str]) -> bool: | ||
os.makedirs(self.MEDIA_DIR, exist_ok=True) | os.makedirs(self.MEDIA_DIR, exist_ok=True) | ||
url: Final[str] = 'https://pbs.twimg.com/media/' | url: Final[str] = urljoin('https://pbs.twimg.com/media/', media_name) | ||
res: Final[Response | None] = self._request(url) | res: Final[Response | None] = self._request(url) | ||
if res is not None: | if res is not None: | ||
if 'image' not in res.headers['content-type']: | if 'image' not in res.headers['content-type']: | ||
return False | return False | ||
with open(self.MEDIA_DIR | with open(os.path.join(self.MEDIA_DIR, media_name), "wb") as f: | ||
f.write(res.content) | f.write(res.content) | ||
return True | return True | ||
335行目: | 334行目: | ||
##ツイートの日付を取得 | ##ツイートの日付を取得 | ||
def _tweet_date(self, tweet: bs4.element.Tag) -> datetime: | def _tweet_date(self, tweet: bs4.element.Tag) -> datetime: | ||
date_str = tweet.find(class_='tweet-date').a['title'] | date_str: str = tweet.find(class_='tweet-date').a['title'] | ||
date = datetime.strptime(date_str, '%b %d, %Y · %I:%M %p | date: datetime = datetime.strptime(date_str, '%b %d, %Y · %I:%M %p %Z').replace(tzinfo=ZoneInfo('UTC')).astimezone(ZoneInfo('Asia/Tokyo')) | ||
return date | return date | ||
#self._dateの日付のツイートがなくなったときの処理 | #self._dateの日付のツイートがなくなったときの処理 | ||
def _next_day(self, date: datetime | None = None) -> None: | def _next_day(self, date: datetime | None = None) -> None: | ||
self. | if self._txt_data[0]: # 空でなければ出力 | ||
self._txt_data[0] = self._convert_to_text_table(self._txt_data[0]) | |||
if os.name == 'nt': # Windows | |||
self._txt_data[0] = self._date.strftime('\n=== %#m月%#d日 ===\n') + self._txt_data[0] | |||
print(self._date.strftime('%#m月%#d日のツイートを取得完了ですを')) | |||
else: # Mac or Linux | |||
self._txt_data[0] = self._date.strftime('\n=== %-m月%-d日 ===\n') + self._txt_data[0] | |||
print(self._date.strftime('%-m月%-d日のツイートを取得完了ですを')) | |||
if date is not None: | if date is not None: | ||
self._txt_data.insert(0,'') | self._txt_data.insert(0, '') | ||
self._date = date | self._date = date | ||
360行目: | 362行目: | ||
media_list.append(f"[[ファイル:{media_name}|240px]]") | media_list.append(f"[[ファイル:{media_name}|240px]]") | ||
if self._download_media(media_name): | if self._download_media(media_name): | ||
print(self.MEDIA_DIR | print(os.path.join(self.MEDIA_DIR, media_name) + ' をアップロードしなければない。') | ||
else: | else: | ||
print('https://pbs.twimg.com/media/' | print(urljoin('https://pbs.twimg.com/media/', media_name) + ' をアップロードしなければない。') | ||
# 動画についてはm3u8で落ちてきて面倒臭いため取得しない | # 動画についてはm3u8で落ちてきて面倒臭いため取得しない | ||
""" | """ | ||
378行目: | 380行目: | ||
link: str = tweet_quote.select_one('.quote-link').get('href') | link: str = tweet_quote.select_one('.quote-link').get('href') | ||
link = re.sub('#.*$', '', link) | link = re.sub('#.*$', '', link) | ||
link = self.TWITTER_URL | link = urljoin(self.TWITTER_URL, link) | ||
quote_txt = '<br>\n' + self._archive_url(link, link) | quote_txt = '<br>\n' + self._archive_url(link, link) | ||
return quote_txt | return quote_txt | ||
def _get_tweet_poll(self, tweet: bs4.element.Tag) -> str: | |||
tweet_poll: Final[bs4.element.Tag | None] = tweet.select_one('.tweet-body > .poll') | |||
poll_txt: str = '' | |||
if tweet_poll is not None: | |||
poll_meters = tweet_poll.select('.poll-meter') | |||
poll_txt += '<br>\n' | |||
for poll_meter in poll_meters: | |||
poll_txt += '<br>\n ' + poll_meter.select_one('.poll-choice-value').text + ' ' + poll_meter.select_one('.poll-choice-option').text | |||
poll_txt += '<br>\n ' + tweet_poll.select_one('.poll-info').text | |||
return poll_txt | |||
#ページからツイート本文をself._txt_dataに収めていく | #ページからツイート本文をself._txt_dataに収めていく | ||
391行目: | 404行目: | ||
if tweet.find(class_='retweet-header') is not None: ##retweet-headerはリツイートを示すので入っていれば処理しない | if tweet.find(class_='retweet-header') is not None: ##retweet-headerはリツイートを示すので入っていれば処理しない | ||
continue | continue | ||
tweet_url: str = self.TWITTER_URL | tweet_url: str = urljoin(self.TWITTER_URL, re.sub('#[^#]*$', '', tweet.find(class_='tweet-link').get('href'))) ##ツイートのURL作成 | ||
date = self._tweet_date(tweet) | date = self._tweet_date(tweet) | ||
if date.year != self._date.year or date.month != self._date.month or date.day != self._date.day: | if date.year != self._date.year or date.month != self._date.month or date.day != self._date.day: | ||
398行目: | 411行目: | ||
tweet_content: bs4.element.Tag = tweet.find(class_='tweet-content media-body') ##ツイートの中身だけ取り出す | tweet_content: bs4.element.Tag = tweet.find(class_='tweet-content media-body') ##ツイートの中身だけ取り出す | ||
self._archive_soup(tweet_content) ##ツイートの中身のリンクをテンプレートArchiveに変化 | self._archive_soup(tweet_content) ##ツイートの中身のリンクをテンプレートArchiveに変化 | ||
poll_txt: str = self._get_tweet_poll(tweet) ##投票の取得 | |||
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[0] = '!' + 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' \ | + poll_txt + quote_txt + media_txt + '\n|-\n' \ | ||
+ self._txt_data[0] ##wikiの文法に変化 | + self._txt_data[0] ##wikiの文法に変化 | ||
self._limit_count += 1 ##記録回数をカウント | self._limit_count += 1 ##記録回数をカウント | ||
446行目: | 460行目: | ||
if re.match('https' + self.NITTER_INSTANCE[4:], url.get('href')): | if re.match('https' + self.NITTER_INSTANCE[4:], url.get('href')): | ||
#Nitter上のTwitterへのリンクを直す | #Nitter上のTwitterへのリンクを直す | ||
url_link: str = url.get('href').replace('https' + self.NITTER_INSTANCE[4:], self.TWITTER_URL | url_link: str = url.get('href').replace('https' + self.NITTER_INSTANCE[4:], self.TWITTER_URL) | ||
url_link = re.sub('\?.*$', '', url_link) | url_link = re.sub('\?.*$', '', url_link) | ||
url.replace_with(self._archive_url(url_link, url_link)) ##テンプレートArchiveに変化 | url.replace_with(self._archive_url(url_link, url_link)) ##テンプレートArchiveに変化 | ||
468行目: | 482行目: | ||
##URLから魚拓返す | ##URLから魚拓返す | ||
def _archive(self, url: Final[str]) -> str: | def _archive(self, url: Final[str]) -> str: | ||
archive_url: str = self.ARCHIVE_TODAY_STANDARD | archive_url: str = urljoin(self.ARCHIVE_TODAY_STANDARD, quote(unquote(url), safe='&=+?%')) ##wikiに載せるとき用URLで失敗するとこのままhttps://archive.ph/https%3A%2F%2Fxxxxxxxxの形で返される | ||
res: Final[Response | None] = self._request(self.ARCHIVE_TODAY | res: Final[Response | None] = self._request(urljoin(self.ARCHIVE_TODAY, quote(unquote(url), safe='&=+?%'))) ##アクセス用URL使って結果を取得 | ||
if res is None : ##魚拓接続失敗時処理 | if res is None : ##魚拓接続失敗時処理 | ||
print(archive_url + 'にアクセス失敗ナリ。出力されるテキストにはそのまま記載されるナリ。') | print(archive_url + 'にアクセス失敗ナリ。出力されるテキストにはそのまま記載されるナリ。') | ||
487行目: | 501行目: | ||
for show_more in show_mores: ##show-moreに次ページへのリンクか前ページへのリンクがある | for show_more in show_mores: ##show-moreに次ページへのリンクか前ページへのリンクがある | ||
if show_more.text != self.NEWEST: ##前ページへのリンクではないか判定 | if show_more.text != self.NEWEST: ##前ページへのリンクではないか判定 | ||
new_url: str = self.NITTER_INSTANCE | new_url: str = urljoin(self.NITTER_INSTANCE, self.SEARCH + show_more.a.get('href')) ##直下のaタグのhrefの中身取ってURL頭部分と合体 | ||
res: Final[Response | None] = self._request(new_url) ##接続してHTML取ってくる | res: Final[Response | None] = self._request(new_url) ##接続してHTML取ってくる | ||
if res is None: | if res is None: | ||
515行目: | 529行目: | ||
== 実行例 == | == 実行例 == | ||
20件での実行例。 | 20件での実行例。 | ||
=== | |||
=== 9月16日 === | |||
{|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/1570466085534838785|2=https://archive.ph/vUWjo}} | ||
|- | |- | ||
| | | | ||
ようやく1日が終わる。<br> | |||
<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/ | {{Archive|1=https://twitter.com/kokueisecom/status/1570466219643502592|2=https://archive.ph/r6WIp|3=https://twitter.com/kokueisecom/status/1570466219643502592}} | ||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570467186497716224|2=https://archive.ph/iNx2m}} | ||
|- | |- | ||
| | | | ||
{{Archive|1=https:// | ありがとう❗️❗️<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/1570468936298426370|2=https://archive.ph/yKcg7}} | ||
|- | |- | ||
| | | | ||
今日はブラックIT企業の未払い残業代の話の相談があって、若い人からの搾取やばいよな。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | |} | ||
=== 9月17日 === | |||
{|class="wikitable" style="text-align: left;" | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570807392899829760|2=https://archive.ph/50Ntt}} | |||
|- | |- | ||
| | | | ||
弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | |||
<br> | <nowiki>#</nowiki>マシュマロを投げ合おう<br> | ||
{{Archive|1=https://marshmallow-qa.com/apt/d4905b12-9dcf-4f81-af54-b6c3e5237007|2=https://archive.ph/yaEMc|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> | |||
中山5R<br> | |||
<br> | |||
◎スノードーム | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570983261572329472|2=https://archive.ph/fIArg}} | ||
|- | |- | ||
| | | | ||
今のところ全て的中<br> | |||
<br> | |||
後は中京8レースのみ<br> | |||
[[ファイル:Fc1AvL6aAAALVhw.jpg|240px]] | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1570983442170642434|2=https://archive.ph/gLfrX}} | ||
|- | |- | ||
| | | | ||
早起きおじさんです。<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/ | |} | ||
=== 9月19日 === | |||
{|class="wikitable" style="text-align: left;" | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571721136668569602|2=https://archive.ph/8l0IJ}} | |||
|- | |- | ||
| | | | ||
{{Archive|1=https://news.yahoo.co.jp/articles/7bb89d4d6c2f92807a86c05c942505592eaec60e|2=https://archive.ph/bPyFE|3=https://news.yahoo.co.jp/articles/7bb89d4d6c2f92807a86c05c942505592eaec60e}}<br> | |||
<br> | |||
{{Archive|1=https:// | 刺青入れたらカタギじゃないってどういう発想なんだ。<br> | ||
<br> | |||
カタギの定義が知りたいよ。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571796244762365952|2=https://archive.ph/6TAu7}} | |||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | |||
|- | |- | ||
| | | | ||
{{Archive|1=https://youtu.be/2trjonQCFTU|2=https://archive.ph/fFdf1|3=https://youtu.be/2trjonQCFTU}}<br> | |||
<br> | <br> | ||
神回。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571796703229145089|2=https://archive.ph/6HzLi}} | ||
|- | |- | ||
| | | | ||
日曜日中山11R<br> | |||
{{Archive|1=https://twitter.com/ | <br> | ||
◎ アスクビクターモア7.25<br> | |||
◯ラーグルフ5.75<br> | |||
▲ローシャムパーク4.75<br> | |||
△オニャンコポン 4.75<br> | |||
△ショウナンマグマ 4.75<br> | |||
△キングズパレス 4.75<br> | |||
△ボーンディスウェイ 4.75<br> | |||
△マテンロウスカイ4.25<br> | |||
△ガイアフォース 4.25<br> | |||
<br> | |||
これを元にして番組で予想しました。<br> | |||
{{Archive|1=https://twitter.com/CallinShow/status/1571796244762365952|2=https://archive.ph/6TAu7|3=https://twitter.com/CallinShow/status/1571796244762365952}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571798678263984129|2=https://archive.ph/VYez0}} | ||
|- | |- | ||
| | | | ||
みんな真剣に予想してるから太組不二雄チャンネル是非みてほしい。<br> | |||
{{Archive|1=https://twitter.com/ | <br> | ||
今日なんか1000人以上が同時接続でいたな。<br> | |||
{{Archive|1=https://twitter.com/CallinShow/status/1571796244762365952|2=https://archive.ph/6TAu7|3=https://twitter.com/CallinShow/status/1571796244762365952}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571799518383067138|2=https://archive.ph/yqeb2}} | ||
|- | |- | ||
| | | | ||
オレの予想は、競馬新聞を100%読む。<br> | |||
<br> | |||
競馬新聞は、情報の宝庫。<br> | |||
<br> | |||
競馬新聞は競馬ブック派。<br> | |||
<br> | |||
地方では、日刊競馬も買う。<br> | |||
<br> | |||
市川俊吾さんの予想を見るために。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1571804494631174144|2=https://archive.ph/APHc1}} | ||
|- | |- | ||
| | | | ||
タトゥーに対してのアンケートを取りたいと思います。<br> | |||
<br> | |||
35% タトゥーは文化だ。<br> | |||
65% タトゥーは文化じゃない。<br> | |||
717 votes • Final results | |||
|- | |- | ||
|} | |} | ||
=== | |||
=== 9月20日 === | |||
{|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/1572135837009342466|2=https://archive.ph/DnsUI}} | ||
|- | |- | ||
| | | | ||
弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | 弁護士唐澤貴洋への匿名のメッセージを募集中!<br> | ||
<nowiki>#</nowiki>マシュマロを投げ合おう<br> | <nowiki>#</nowiki>マシュマロを投げ合おう<br> | ||
{{Archive|1=https://marshmallow-qa.com/apt/ | {{Archive|1=https://marshmallow-qa.com/apt/1c6628a8-45c6-44f2-9a93-362ce5332b61|2=https://archive.ph/Y66Sy|3=https://marshmallow-qa.com/apt/1c6628a8-45c6-44f2-9a93-362ce5332b61}} | ||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1572184661442568193|2=https://archive.ph/K84kE}} | ||
|- | |- | ||
| | | | ||
@rie0985 <br> | |||
<br> | <br> | ||
書類が銀座に届いたのでご確認ください。<br> | |||
<br> | <br> | ||
お返事待っています。 | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1572191953613385728|2=https://archive.ph/hJejs}} | ||
|- | |- | ||
| | | | ||
素晴らしい。<br> | |||
{{Archive|1=https://twitter.com/nyan_ika3/status/1572190195583422465|2=https://archive.ph/bQtFW|3=https://twitter.com/nyan_ika3/status/1572190195583422465}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1572204964541526021|2=https://archive.ph/Keb1S}} | ||
|- | |- | ||
| | | | ||
35%いれば十分じゃない。<br> | |||
{{Archive|1=https://twitter.com/CallinShow/status/ | <br> | ||
35%がカタギじゃないって国ないだろ。<br> | |||
<br> | |||
35%の人が応援してくれる政党ありじゃない。<br> | |||
{{Archive|1=https://twitter.com/CallinShow/status/1571804494631174144|2=https://archive.ph/APHc1|3=https://twitter.com/CallinShow/status/1571804494631174144}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1572208999025741824|2=https://archive.ph/2eoOV}} | ||
|- | |- | ||
| | | | ||
カタギの場所に入れないってことはカタギじゃない扱いだよな。<br> | |||
{{Archive|1=https://twitter.com/ | 定義もしっかりしてないのに、何を意味あるように話してるんだろうな。<br> | ||
{{Archive|1=https://twitter.com/CallinShow/status/1571721136668569602|2=https://archive.ph/8l0IJ|3=https://twitter.com/CallinShow/status/1571721136668569602}} | |||
|- | |- | ||
!{{CallinShowLink|1=https://twitter.com/CallinShow/status/ | !{{CallinShowLink|1=https://twitter.com/CallinShow/status/1572215385348534272|2=https://archive.ph/WsO05}} | ||
|- | |- | ||
| | | | ||
今日も疲れきった。<br> | |||
<br> | <br> | ||
オレも歳だな。 | |||
|- | |- | ||
|} | |} |