Compare commits

...

2 Commits

Author SHA1 Message Date
blade c431f5103f update api description 2025-10-11 18:27:54 +08:00
blade 178ad090fa a littel change 2025-10-11 18:24:29 +08:00
3 changed files with 22 additions and 15 deletions

View File

@ -225,9 +225,9 @@ TWITTER_CONFIG = {
"user_search_url": "https://api.twitter.com/2/users/by/username/{0}", "user_search_url": "https://api.twitter.com/2/users/by/username/{0}",
"contents_search_url": "https://api.twitter.com/2/users/{0}/tweets?max_results=100&tweet.fields=text,created_at&exclude=replies,retweets", "contents_search_url": "https://api.twitter.com/2/users/{0}/tweets?max_results=100&tweet.fields=text,created_at&exclude=replies,retweets",
"monitor_accounts": [ "monitor_accounts": [
"FoxNews", {"name": "FoxNews", "id": ""},
"WhiteHouse", {"name": "WhiteHouse", "id": "1879644163769335808"},
"sama", {"name": "sama", "id": ""},
"PressSec", {"name": "PressSec", "id": ""},
], ],
} }

View File

@ -12,6 +12,11 @@ import pandas as pd
logger = logging.logger logger = logging.logger
class TwitterRetriever: class TwitterRetriever:
"""
免费版本的账号每个月只能获取100条推文
需要使用付费版本的账号基础版每个月可以获取15000条推文,200美元/
高级版每个月可以获取1000000条推文,5000美元/
"""
def __init__(self): def __init__(self):
self.keys = TWITTER_CONFIG["keys"] self.keys = TWITTER_CONFIG["keys"]
self.headers = { self.headers = {
@ -53,17 +58,19 @@ class TwitterRetriever:
return None return None
def monitor_accounts(self): def monitor_accounts(self):
for account in self.monitor_account_list: for account_dict in self.monitor_account_list:
logger.info(f"Monitoring account: {account}") user_name = account_dict["name"]
user_id = account_dict["id"]
logger.info(f"Monitoring account: {user_name}")
logger.info(f"Sleeping for {self.sleep_time} seconds") logger.info(f"Sleeping for {self.sleep_time} seconds")
time.sleep(self.sleep_time) # time.sleep(self.sleep_time)
result_list = [] result_list = []
user = self.search_user(account) if user_id is None or user_id == "":
user = self.search_user(user_name)
if user is None: if user is None:
continue continue
username = user["data"]["username"]
user_id = str(user["data"]["id"]) user_id = str(user["data"]["id"])
contents = self.search_contents(username, user_id) contents = self.search_contents(user_name, user_id)
if contents is None: if contents is None:
continue continue
twitter_contents = contents["data"] twitter_contents = contents["data"]
@ -75,7 +82,7 @@ class TwitterRetriever:
text = content["text"] text = content["text"]
result = { result = {
"user_id": user_id, "user_id": user_id,
"user_name": username, "user_name": user_name,
"timestamp": timestamp_ms, "timestamp": timestamp_ms,
"date_time": beijing_time_str, "date_time": beijing_time_str,
"text": text "text": text
@ -86,7 +93,7 @@ class TwitterRetriever:
self.db_twitter_content.insert_data_to_mysql(result_df) self.db_twitter_content.insert_data_to_mysql(result_df)
logger.info(f"Inserted {len(result_df)} rows into twitter_content") logger.info(f"Inserted {len(result_df)} rows into twitter_content")
else: else:
logger.warning(f"No data inserted for account: {account}") logger.warning(f"No data inserted for account: {user_name}")
def transform_datetime(self, datetime_text: str): def transform_datetime(self, datetime_text: str):
utc_time = datetime.strptime(datetime_text, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=pytz.UTC) utc_time = datetime.strptime(datetime_text, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=pytz.UTC)