|
import requests
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
|
def get_news(api_key, query, language='ru', page_size=10):
|
|
url = 'https://newsapi.org/v2/everything'
|
|
params = {
|
|
'q': query,
|
|
'language': language,
|
|
'pageSize': page_size,
|
|
'apiKey': api_key
|
|
}
|
|
response = requests.get(url, params=params)
|
|
if response.status_code == 200:
|
|
return response.json()['articles']
|
|
else:
|
|
print(f"Ошибка: {response.status_code}")
|
|
return []
|
|
|
|
|
|
def get_article_body(url):
|
|
try:
|
|
|
|
response = requests.get(url)
|
|
response.raise_for_status()
|
|
soup = BeautifulSoup(response.text, 'html.parser')
|
|
|
|
|
|
if 'habr.com' in url:
|
|
body = soup.find('div', class_='article-formatted-body')
|
|
if body:
|
|
return body.get_text(strip=True)
|
|
|
|
|
|
elif 'lenta.ru' in url:
|
|
body = soup.find('div', class_='topic-body__content')
|
|
if body:
|
|
return body.get_text(strip=True)
|
|
|
|
|
|
return ""
|
|
except Exception as e:
|
|
print(f"Ошибка при получении статьи: {e}")
|
|
return ""
|
|
|
|
|
|
def process_text_with_lm(text, lm_api_url):
|
|
if not text:
|
|
return ""
|
|
|
|
|
|
article_structure = (
|
|
"Структура статьи:\n"
|
|
"1. Заголовок: Убедитесь, что он привлечет внимание.\n"
|
|
"2. Введение: Кратко описать тему и зачем она важна.\n"
|
|
"3. Основная часть: Подробное изложение фактов, данных и мнений по теме.\n"
|
|
" - Подразделы: Если необходимо, разделите на несколько разделов.\n"
|
|
"4. Заключение: Подвести итоги и дать рекомендации или вопросы для размышления.\n"
|
|
"5. Источники: Указать используемые источники информации, если применимо.\n"
|
|
)
|
|
|
|
|
|
payload = {
|
|
"model": "",
|
|
"messages": [
|
|
{"role": "system", "content": "Вы — экспертный писатель, и ваша задача — создать качественную новостную статью."},
|
|
{"role": "user", "content": f"Напишите статью на основе следующего текста:\n{text}\n\n{article_structure}"}
|
|
],
|
|
"temperature": 0.7,
|
|
"max_tokens": 5000,
|
|
"stream": False
|
|
}
|
|
|
|
try:
|
|
response = requests.post(lm_api_url, json=payload)
|
|
response.raise_for_status()
|
|
return response.json()['choices'][0]['message']['content']
|
|
except Exception as e:
|
|
print(f"Ошибка при обработке текста: {e}")
|
|
return ""
|
|
|
|
|
|
def process_news_with_body(news, lm_api_url):
|
|
for article in news:
|
|
title = article['title']
|
|
url = article['url']
|
|
|
|
|
|
body = get_article_body(url)
|
|
|
|
|
|
processed_body = process_text_with_lm(body, lm_api_url)
|
|
|
|
|
|
print(f"Заголовок: {title}")
|
|
print(f"Ссылка: {url}")
|
|
print(f"Обработанное тело статьи:\n{processed_body}")
|
|
print('---')
|
|
|
|
|
|
def main():
|
|
|
|
api_key = 'c77fda8ccb9b446d88abc56bd6f548c1'
|
|
query = 'технологии'
|
|
lm_api_url = 'http://localhost:1234/v1/chat/completions'
|
|
|
|
|
|
news = get_news(api_key, query)
|
|
|
|
|
|
process_news_with_body(news, lm_api_url)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |