File size: 5,282 Bytes
88dd0da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
import requests
from bs4 import BeautifulSoup
# Функция для получения новостей через API
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')
# Пример для Habr
if 'habr.com' in url:
body = soup.find('div', class_='article-formatted-body')
if body:
return body.get_text(strip=True)
# Пример для Lenta.ru
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 ""
# Функция для обработки текста через LM Studio
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"
)
# Отправляем текст в LM Studio с улучшенными промтами
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 ""
# Функция для обработки новостей с извлечением тела статьи и обработкой через LM Studio
def process_news_with_body(news, lm_api_url):
for article in news:
title = article['title']
url = article['url']
# Получаем тело статьи
body = get_article_body(url)
# Обрабатываем тело статьи через LM Studio
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' # Замените на ваш API ключ от NewsAPI
query = 'технологии' # Тема для поиска новостей
lm_api_url = 'http://localhost:1234/v1/chat/completions' # Замените на ваш URL API LM Studio
# Получаем новости
news = get_news(api_key, query)
# Обрабатываем новости
process_news_with_body(news, lm_api_url)
# Запуск программы
if __name__ == "__main__":
main() |