Compare commits
8
Commits
22fb2c9bc9
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2db373f54a | ||
|
|
b7bf1d8c98 | ||
|
|
5b4c818451 | ||
|
|
f31f0def29 | ||
|
|
36f6932bb7 | ||
|
|
b631b10ca6 | ||
|
|
71f6298708 | ||
|
|
15b76871cf |
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.7-slim
|
FROM python:3.11
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY ./install.sh ./requirements.txt ./
|
COPY ./install.sh ./requirements.txt ./
|
||||||
|
|||||||
+4
-1
@@ -1,9 +1,12 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from loguru import logger
|
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
|
|
||||||
from app.api import api as api_router
|
from app.api import api as api_router
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
app = FastAPI(title='prayertimes',
|
app = FastAPI(title='prayertimes',
|
||||||
version='1.0.0',
|
version='1.0.0',
|
||||||
description='An API for fetching islamic prayer times from Presidency of Religious Affairs of Turkey')
|
description='An API for fetching islamic prayer times from Presidency of Religious Affairs of Turkey')
|
||||||
|
|||||||
+20
-8
@@ -7,7 +7,13 @@ from aiocache import cached, Cache
|
|||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
_http = httpx.AsyncClient(timeout=20, follow_redirects=True)
|
_http = httpx.AsyncClient(
|
||||||
|
timeout=20,
|
||||||
|
follow_redirects=True,
|
||||||
|
headers={
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class PrayerTimes(BaseModel):
|
class PrayerTimes(BaseModel):
|
||||||
@@ -20,7 +26,7 @@ class PrayerTimes(BaseModel):
|
|||||||
isha: str
|
isha: str
|
||||||
|
|
||||||
|
|
||||||
@cached(ttl=60*60, cache=Cache.MEMORY)
|
@cached(ttl=3 * 60 * 60, cache=Cache.MEMORY)
|
||||||
async def parse_prayer_times(url: str) -> List[PrayerTimes]:
|
async def parse_prayer_times(url: str) -> List[PrayerTimes]:
|
||||||
res = await _http.get(url)
|
res = await _http.get(url)
|
||||||
res.raise_for_status()
|
res.raise_for_status()
|
||||||
@@ -28,16 +34,22 @@ async def parse_prayer_times(url: str) -> List[PrayerTimes]:
|
|||||||
|
|
||||||
items = []
|
items = []
|
||||||
for row in soup.select('#tab-1 .vakit-table tbody tr'):
|
for row in soup.select('#tab-1 .vakit-table tbody tr'):
|
||||||
cell_texts = (c.text.strip() for c in row.select('td'))
|
cells = [c.text.strip() for c in row.select('td')]
|
||||||
headers = PrayerTimes.__fields__.keys()
|
items.append(PrayerTimes(
|
||||||
parsed = dict(zip(headers, cell_texts))
|
date=datetime.strptime(cells[0], '%d.%m.%Y'),
|
||||||
parsed['date'] = datetime.strptime(parsed['date'], '%d.%m.%Y')
|
fajr=cells[2],
|
||||||
items.append(PrayerTimes(**parsed))
|
sun=cells[3],
|
||||||
|
dhuhr=cells[4],
|
||||||
|
asr=cells[5],
|
||||||
|
maghrib=cells[6],
|
||||||
|
isha=cells[7],
|
||||||
|
))
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
def make_location_url(location_id: int) -> str:
|
def make_location_url(location_id: int) -> str:
|
||||||
return f'https://namazvakitleri.diyanet.gov.tr/en-US/{location_id}'
|
url = f'https://namazvakitleri.diyanet.gov.tr/en-US/{location_id}'
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
async def get_prayer_times(location_id: int) -> List[PrayerTimes]:
|
async def get_prayer_times(location_id: int) -> List[PrayerTimes]:
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
beautifulsoup4==4.10.0
|
beautifulsoup4==4.10.0
|
||||||
fastapi==0.74.1
|
fastapi==0.74.1
|
||||||
httpx==0.22.0
|
httpx==0.23.3
|
||||||
loguru==0.6.0
|
|
||||||
uvicorn==0.17.5
|
uvicorn==0.17.5
|
||||||
aiocache==0.11.1
|
aiocache==0.11.1
|
||||||
|
pydantic==1.10.7
|
||||||
|
|||||||
Reference in New Issue
Block a user