Skip to content

Instantly share code, notes, and snippets.

@yumechi
Created December 29, 2021 14:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yumechi/578e987919252af0d02b92df613a66c0 to your computer and use it in GitHub Desktop.
Save yumechi/578e987919252af0d02b92df613a66c0 to your computer and use it in GitHub Desktop.
tweet_idをtweet.jsから引っ張るやつ
import json
from pprint import pprint
from datetime import datetime, timezone
from dataclasses import dataclass
def date_reformat(s: str) -> datetime:
"""
reforemat dateformat
example:
Fri May 25 08:35:41 +0000 2018 -> 2018-05-25 08:35:41
Args:
s (string): US format datetime
Returns:
datetime: my format datetime
"""
return datetime.strptime(s, '%a %b %d %H:%M:%S %z %Y')
@dataclass
class TweetData:
tweet_id: int
created_at: datetime
full_text: str
status: bool = False
def __str__(self) -> str:
"""
debug時はツイートコンテンツを出していていたが、csvとして出すときにめんどくさくなったので消しました。
"""
return ",".join([
str(self.tweet_id),
self.date_str(self.created_at),
str(self.status).lower(),
])
def __gt__(self, __o: object) -> bool:
return self.created_at > __o.created_at
def date_str(target_time: datetime) -> str:
return datetime.strftime(target_time, '%Y-%m-%d %H:%M:%S')
def solve() -> None:
output = []
# tweet.js から最初の変数名を消してjsonとして読み込めるようにする
with open('tweet.json') as f:
df = json.load(f)
for f in df:
try:
tweet = f['tweet']
tweet_id = int(tweet['id'])
created_at = date_reformat(str(tweet['created_at']))
full_text = str(tweet['full_text']).replace("\n", "\\n")
output.append(TweetData(
tweet_id=tweet_id,
created_at=created_at,
full_text=full_text,
))
except Exception as e:
print(f"error: {e}")
pprint(f)
output.sort(reverse=True)
# これより後のデータは黒歴史クリーナーなり、takanahikoさんのツールで消せたためフィルタ用
threshold_date = datetime(year=2020, month=10, day=30, tzinfo=timezone.utc)
# 後でjqでいろいろやってたけどcsv→jqにする作業をjqでやらずにpython側で出したほうがよさそう
header = [','.join(['tweet_id', 'created_at', 'status'])]
data = [str(line) for line in output
if threshold_date > line.created_at]
contents = header + data
print('\n'.join(contents))
if __name__ == '__main__':
solve()
@yumechi
Copy link
Author

yumechi commented Dec 29, 2021

statusは後作業で必要だったので入れてます。

後はこんな感じで

python data_filter.py > result.txt
jq -s -R 'split("\n")|map(split(","))|map({"tweet_id": .[0], "created_at": .[1], "status": .[2]})' result.txt | sed -e 's/\"false\"/false/' > result.json

手で一番最初のjsonを消すとjsonとして扱いやすいかも。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment