update potus tracker

This commit is contained in:
MuslemRahimi 2025-02-27 00:06:47 +01:00
parent 5fc0a4e9e0
commit 70bf868ad9

View File

@ -4,6 +4,7 @@ from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.chrome import ChromeDriverManager
from geopy.geocoders import Nominatim from geopy.geocoders import Nominatim
import aiohttp import aiohttp
@ -240,8 +241,87 @@ async def get_historical_sector():
continue continue
return res_dict return res_dict
async def get_truth_social_post():
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://trumpstruth.org/?per_page=40")
wait = WebDriverWait(driver, 20)
statuses = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'status')))
posts_data = []
for status in statuses:
try:
# Extract username
username = status.find_element(By.CLASS_NAME, 'status-info__account-name').text
except NoSuchElementException:
username = "N/A"
try:
# Extract date (second meta item)
meta_items = status.find_elements(By.CLASS_NAME, 'status-info__meta-item')
date = meta_items[1].text if len(meta_items) >= 2 else "N/A"
except (NoSuchElementException, IndexError):
date = "N/A"
try:
# Extract content text
content_element = status.find_element(By.CLASS_NAME, 'status__content')
content = content_element.text.strip()
except NoSuchElementException:
content = ""
# Extract video URL if present
video_url = ""
try:
video_element = status.find_element(By.CSS_SELECTOR, '.status-attachment--video video')
video_url = video_element.get_attribute('src')
except NoSuchElementException:
pass
# Extract external link details if present
external_link = ""
link_title = ""
link_description = ""
try:
card = status.find_element(By.CLASS_NAME, 'status-card')
external_link = card.get_attribute('href')
link_title = card.find_element(By.CLASS_NAME, 'status-card__title').text
link_description = card.find_element(By.CLASS_NAME, 'status-card__description').text
except NoSuchElementException:
pass
# Extract original post URL
try:
original_post_url = status.find_element(By.CLASS_NAME, 'status__external-link').get_attribute('href')
except NoSuchElementException:
original_post_url = ""
posts_data.append({
'date': date,
'content': content,
'videoUrl': video_url,
'externalLink': external_link,
'title': link_title,
'source': original_post_url
})
posts_data = [item for item in posts_data if item['videoUrl'] == "" and "youtube" not in item['content'] and item['content'] != ""]
return posts_data
async def get_data(): async def get_data():
post_list = await get_truth_social_post()
market_dict = await get_historical_sector() market_dict = await get_historical_sector()
executive_orders = get_executive_orders() executive_orders = get_executive_orders()
@ -310,8 +390,9 @@ async def get_data():
if item['date'] == price_item['date']: if item['date'] == price_item['date']:
item['changesPercentage'] = price_item['changesPercentage'] item['changesPercentage'] = price_item['changesPercentage']
break break
res_dict = {'marketPerformance': market_dict, 'history': data, 'executiveOrders': executive_orders_summary} res_dict = {'posts': post_list, 'marketPerformance': market_dict, 'history': data, 'executiveOrders': executive_orders_summary}
save_json(res_dict) save_json(res_dict)
asyncio.run(get_data()) asyncio.run(get_data())