-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathigu_duyurular.py
122 lines (97 loc) · 4.46 KB
/
igu_duyurular.py
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
116
117
118
119
120
121
122
import requests
from bs4 import BeautifulSoup
from dataclasses import dataclass
from typing import List
from datetime import datetime
import logging
@dataclass
class Slider:
baslik: str
aciklama: str
resim_url: str
link: str
@dataclass
class Duyuru:
baslik: str
tarih: str
link: str
class DuyuruManager:
def __init__(self):
self.base_url = "https://www.gelisim.edu.tr"
def get_sliders(self) -> List[Slider]:
"""Ana sayfadaki slider görsellerini çeker"""
try:
response = requests.get(f"{self.base_url}/tr/gelisim-anasayfa")
soup = BeautifulSoup(response.content, 'html.parser')
sliders = []
slider_container = soup.find('div', {'class': 'carousel-inner'})
if slider_container:
for item in slider_container.find_all('div', {'class': 'carousel-item'}):
baslik = item.find('h2').text.strip() if item.find('h2') else ""
aciklama = item.find('p').text.strip() if item.find('p') else ""
resim = item.find('img')
resim_url = f"{self.base_url}{resim['src']}" if resim and resim.get('src') else ""
link = item.find('a')['href'] if item.find('a') else ""
if link and not link.startswith('http'):
link = f"{self.base_url}{link}"
sliders.append(Slider(
baslik=baslik,
aciklama=aciklama,
resim_url=resim_url,
link=link
))
return sliders
except Exception as e:
logging.error(f"Slider verileri çekilirken hata oluştu: {str(e)}")
return []
def get_duyurular(self) -> List[Duyuru]:
"""Ana sayfadaki duyuruları çeker"""
try:
response = requests.get(f"{self.base_url}/tr/gelisim-anasayfa")
soup = BeautifulSoup(response.content, 'html.parser')
duyurular = []
duyuru_container = soup.find('div', {'class': 'announcements'}) or \
soup.find('div', {'class': 'duyurular'})
if duyuru_container:
for item in duyuru_container.find_all(['div', 'article'], {'class': ['announcement-item', 'duyuru-item']}):
baslik = item.find(['h3', 'h4', 'h5']).text.strip() if item.find(['h3', 'h4', 'h5']) else ""
tarih = item.find(['span', 'div'], {'class': ['date', 'tarih']}).text.strip() if item.find(['span', 'div'], {'class': ['date', 'tarih']}) else ""
link = item.find('a')['href'] if item.find('a') else ""
if link and not link.startswith('http'):
link = f"{self.base_url}{link}"
duyurular.append(Duyuru(
baslik=baslik,
tarih=tarih,
link=link
))
return duyurular
except Exception as e:
logging.error(f"Duyurular çekilirken hata oluştu: {str(e)}")
return []
def format_slider_message(self, sliders: List[Slider]) -> str:
"""Slider bilgilerini mesaj formatına çevirir"""
if not sliders:
return "❌ Slider bilgileri alınamadı."
mesaj = "🎯 Güncel Slider Görselleri\n"
mesaj += "─" * 30 + "\n\n"
for i, slider in enumerate(sliders, 1):
mesaj += f"📌 {slider.baslik}\n"
if slider.aciklama:
mesaj += f"└ {slider.aciklama}\n"
if slider.link:
mesaj += f"└ 🔗 {slider.link}\n"
mesaj += "\n"
return mesaj
def format_duyuru_message(self, duyurular: List[Duyuru]) -> str:
"""Duyuruları mesaj formatına çevirir"""
if not duyurular:
return "❌ Duyuru bulunamadı."
mesaj = "📢 Son Duyurular\n"
mesaj += "─" * 30 + "\n\n"
for duyuru in duyurular:
mesaj += f"📌 {duyuru.baslik}\n"
mesaj += f"└ 📅 {duyuru.tarih}\n"
if duyuru.link:
mesaj += f"└ 🔗 {duyuru.link}\n"
mesaj += "\n"
return mesaj