Diyanet API hizmeti sunuyor mu? Namaz Vakitlerini nasıl çekebiliriz

Merhaba,

Namaz vakitlerini çekerek bir uygulamada kullanmak istiyorum, diyanetin sunduğu bir api servisine rastlayamadım.Eskiden kalma bir link var ancak artık çalışmıyor http://www.diyanet.gov.tr/turkish/namaz.asp

Konu hakkında bilgisi olan arkadaşlar paylaşabilirse çok sevinirim, nereden çekebiliriz bu bilgileri.

Bir diğer düşüncemde BeautifulSoup ile direk diyanet.gov.tr websitesinden çekip kullanmak, bu yöntemin olumlu/olumsuz yönleri hakkında tavsiyeleri olan arkadaşların yorumlarınıda bekliyorum.

Teşekkürler

Diyanet sunuyormu bilmiyorum.ama buradaki APIye baka bilirsiniz.bir kac APIye baktim en iyisi bu gibi gorunuyor.

neden olmasin.ola bilir tabi.

Sağolasın, evet bende bunu ve birkaç farklı api hizmetini gördüm ama direk diyanetten alabilirmiyim kısmındayım ama sanırım yok.

Esselamü Aleyküm,

Zamanında f"https://www.haberturk.com/namaz-vakitleri/{sehir}" sitesinden vakitleri elde eden bir program yazmıştım, belki işinize yarar. Diyanet ile aynı zannediyorum veriler, oradan alıyorlar büyük ihtimalle. Bir API şeklinde yazmamıştım ama programın bulunduğu dizinde sehirler isminde bir boş klasör oluşturursanız, 81 vilayet için 81 tane .txt dosyası oluşturur. Programın yaptığı, bu .txt dosyalarına içinde bulunduğumuz ayın namaz vakitlerini

{
...
 26: {'sab': Saat(hour='05', minute='58'),
  'ogl': Saat(hour='12', minute='46'),
  'iki': Saat(hour='16', minute='26'),
  'aks': Saat(hour='19', minute='23'),
  'yat': Saat(hour='20', minute='43')},
...
}

formunda yazmak. Dosyaya yazmak yerine istediğiniz gibi kullanabilirsiniz. Tabii siz kendiniz de bu siteden bu verileri çeken bir program da yazabilirsiniz :d.

import calendar
import itertools as it
import json
import re
from collections import namedtuple
from datetime import datetime as dt
from urllib.request import urlopen

from bs4 import BeautifulSoup

sehirler = ("adana", "adiyaman", "afyonkarahisar", "agri", "amasya", "ankara",
            "antalya", "artvin", "aydin", "balikesir", "bilecik", "bingol",
            "bitlis", "bolu", "burdur", "bursa", "canakkale", "cankiri",
            "corum", "denizli", "diyarbakir", "edirne", "elazig", "erzincan",
            "erzurum", "eskisehir", "gaziantep", "giresun", "gumushane",
            "hakkari", "hatay", "isparta", "mersin", "istanbul", "izmir",
            "kars", "kastamonu", "kayseri", "kirklareli", "kirsehir",
            "kocaeli", "konya", "kutahya", "malatya", "manisa",
            "kahramanmaras", "mardin", "mugla", "mus", "nevsehir", "nigde",
            "ordu", "rize", "sakarya", "samsun", "siirt", "sinop", "sivas",
            "tekirdag", "tokat", "trabzon", "tunceli", "sanliurfa", "usak",
            "van", "yozgat", "zonguldak", "aksaray", "bayburt", "karaman",
            "kirikkale", "batman", "sirnak", "bartin", "ardahan", "igdir",
            "yalova", "karabuk", "kilis", "osmaniye", "duzce")

bes_vakit = ("sab", "ogl", "iki", "aks", "yat")

Saat = namedtuple("Saat", ["hour", "minute"], defaults=["00", "00"])

# number of days in the current month
num_days = calendar.monthrange(dt.now().year, dt.now().month)[1]

# bugün ayın kaçı?
today = dt.now().day

vakit_dict = dict.fromkeys(bes_vakit, None)
days_dict = dict.fromkeys(range(1, num_days + 1), vakit_dict)
cities_dict = dict.fromkeys(sehirler, days_dict)

# WARNING: sehirler slice-by-slice process edilebilir hata verirse
# (e.g. 25 vilayet at a time)
for sehir in sehirler:
    site = f"https://www.haberturk.com/namaz-vakitleri/{sehir}"
    html_source = urlopen(site)

    soup = BeautifulSoup(html_source, 'html.parser')

    imsakiye_table = soup.find(id="imsakiye-table")

    # skipping \n, thead and \n
    imsakiye_body = imsakiye_table.contents[3]
    imsakiye_contents = (
                        "".join(str(ibc).split("\n"))
                        for ibc in imsakiye_body.children
                        if ibc != "\n"
                        )
    vakitler = [(Saat(*vakit)
                for vakit in re.findall(r">\s*(\d{2}):(\d{2})\s*</",
                                        content)[1:])
                for content in imsakiye_contents]

    sehir_aylik = cities_dict[sehir]

    # if wanted from today, make it <today-1>
    starting_day = 0
    for day in it.islice(sehir_aylik, starting_day, num_days):
        sehir_aylik[day] = dict(zip(bes_vakit, vakitler[day-1]))

    # Bir şehrin verileri elde edildi, kaydediyoruz
    with open(f"sehirler/{sehir}.txt", mode="w") as f:
        f.write(json.dumps(sehir_aylik, indent=4))

    print(f"{sehir} processed.")
5 Beğeni

Aleyküm selam, programını detaylı inceleyeceğim, yardımın için çok teşekkürler. Selamlar.

1 Beğeni

Merhaba.

Ben google’a “dinanet api” yazınca bu çıkıyor:

Github’da readme’ye vakitler güncel değil yazılmış ama doğru gibi duruyor.

Şöyle ufak bir şey yazdım, sonra biraz daha geliştiririm:

3 Beğeni

Bende boyle basit bir sey yaptim:


Daha gelistirilesi yerleri var ama boylede is gorur.
1 Beğeni

Namaz ingilizce’de prayer demek :slight_smile:

Merhaba hocam, bu kodları bana zip dosyası şeklinde göndermeniz mümkün mü?

Merhaba, neden? Kodların tamamı orada zaten :d

1 Beğeni

Hocam bu kodlar HTML dosyasına mı, JavaScript dosyasına mı, PHP dosyasına mı nereye yapıştırılacak bilmiyorum. O sebeple istedim.

Anladım. Python ile yazıldığından ne HTML ne JS ne de PHP dosyasına yazılabilir diye düşünüyorum. Backend’de bunu çalıştırmak adına ya kodu JS/PHP’ye çevirmek gerekir ya da Python ile Flask/CherryPy gibi bir framework kullanmak gerekir galiba, emin değilim. Maalesef o taraftan anlamıyorum kusura bakmayın…

Selamın Aleyküm

import requests
from bs4 import BeautifulSoup
from Settings import tg_notify
from datetime import datetime
import schedule
import time
def namazgonder():
    r = requests.get("https://namazvakitleri.diyanet.gov.tr/tr-TR/9543/kucukcekmece-icin-namaz-vakti")
    source = BeautifulSoup(r.content,"lxml")
    tarih = source.find("div",attrs={"class":"ti-hicri"})
    tarih = tarih.text
    tarih = tarih.replace("\n","")
    imsak = source.find("div",attrs={"data-vakit-name":"imsak"}).find("div",attrs={"class":"tpt-time"}).text
    imsak = "İmsak Vakti : "+imsak+"\n"
    gunes = source.find("div",attrs={"data-vakit-name":"gunes"}).find("div",attrs={"class":"tpt-time"}).text
    gunes = "Güneş Vakti : "+gunes+"\n"
    oglen = source.find("div",attrs={"data-vakit-name":"ogle"}).find("div",attrs={"class":"tpt-time"}).text
    oglen = "Öğlen Vakti : "+oglen+"\n"
    ikindi = source.find("div",attrs={"data-vakit-name":"ikindi"}).find("div",attrs={"class":"tpt-time"}).text
    ikindi = "İkindi Vakti : "+ikindi+"\n"
    aksam = source.find("div",attrs={"data-vakit-name":"aksam"}).find("div",attrs={"class":"tpt-time"}).text
    aksam = "Akşam Vakti : "+aksam+"\n"
    yatsi = source.find("div",attrs={"data-vakit-name":"yatsi"}).find("div",attrs={"class":"tpt-time"}).text
    yatsi = "Yatsı Vakti : "+yatsi+"\n"
    vakit = aksam+yatsi+imsak+gunes+ikindi
    print(vakit)
    namazmesaji ="*"+tarih+" için Namaz Vakitleri*"+f"""
    return namazmesaji

Bu fonksiyonu kullanabilirsiniz.

1 Beğeni

Bu kod sadece Küçükçekmece için çalışacaktır.

Siteyi şehre göre düzenleyebilirsiniz.

(link olarak denediğimde) Şu bölümü değiştirdiğimde yine küçükçekmece için gösteriyor.

Zamanında Django projesi olarak yapmıştım.

Aşağıda linklere tıklayarak çalıştırma aşamalarını görebilirsin

setup diyanetapi - asciinema (burada işlemler bittikten sonra python3 manage.py runserver diyerek projeyi ayağa kaldırabilirsin, unutmuşum en sonda)

https://asciinema.org/a/S83bv8W9H8gJosP59OV9zp6Sw

3 Beğeni

Anlaşılan önemli olan şuradaki şehir ID’si:

2 Beğeni