• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Excel VBA internetten veri alma

Katılım
19 Mayıs 2017
Mesajlar
35
Excel Vers. ve Dili
makro
merhabalar,

web sitesinden (https://seffaflik.epias.com.tr/elec.../planning/final-daily-production-program-fdpp) girdiğimizde
Kesinleşmiş Günlük Üretim Planı (KGÜP) içerikleri başlangıç tarihi 02.02.2024 ve bitiş tarihi 15.02.2024 girerek Organizasyon Adı HAMİTABAT ELEKTRİK ÜRETİM VE TİCARET A.Ş. ve UEVÇB Adı HAMİTABAT ÜNİTE-10 girdiğimizde sonrasında sorgula tıkladığımız zaman tablo düşmektedir. tablodan excel'e vba veri almak istiyorum yardımcı olursanız şimdiden teşekkür ederim
 
merhabalar,

web sitesinden (https://seffaflik.epias.com.tr/elec.../planning/final-daily-production-program-fdpp) girdiğimizde
Kesinleşmiş Günlük Üretim Planı (KGÜP) içerikleri başlangıç tarihi 02.02.2024 ve bitiş tarihi 15.02.2024 girerek Organizasyon Adı HAMİTABAT ELEKTRİK ÜRETİM VE TİCARET A.Ş. ve UEVÇB Adı HAMİTABAT ÜNİTE-10 girdiğimizde sonrasında sorgula tıkladığımız zaman tablo düşmektedir. tablodan excel'e vba veri almak istiyorum yardımcı olursanız şimdiden teşekkür ederim

Dışa aktar diyip excele veri alabiliyorsunuz
 
dışa aktar dediğimiz evet doğru ama otomatik veri almak istiyorum çözüm alabilirmiyiz?
 
EPİAS'ın API'lerini POST ve/veya GET metoduyla kullanarak verileri alabilirsiniz.

Örneğin; tüketici profil grubunu listelemek için basit bir GET metodu yeterli. Aşağıdaki URL'i sunucuya gönderdiğinizde, sonuçlar size XML formatında gelir;

seffaflik.epias.com.tr/electricity-service/v1/consumption/data/consumer-sector-list

Benzer şekilde, dağıtım şirketlerini XML formatında almak için yine GET metoduyla;

seffaflik.epias.com.tr/electricity-service/v1/consumption/data/get-distribution-companies


Sizin bahsettiğiniz türden veri almak için ilgili API'yi bulup, parametreleri hazırladıktan sonra POST etmek gerekir. Üzerinde çalışmak gerekir, çok kolay bir iş değil....

.
 
Son düzenleme:
Selenium kullanırsanız dosyayı otomatik indirebilirsiniz.


Kod:
Sub Seleniumileindir2()
    Dim WebDriver As New Selenium.ChromeDriver
    Dim keyObj As Selenium.keys
    Set keyObj = New Selenium.keys
    Dim URL As String
    Dim element As WebElement
    Dim tarih As String
    
    WebDriver.Start
    URL = "https://seffaflik.epias.com.tr/electricity/electricity-generation/planning/final-daily-production-program-fdpp"
    WebDriver.Get URL
    
    BeklemeSuresi = 2
    
    Do
        Set element = WebDriver.FindElementByXPath("//input[@name='startDate']")
        WebDriver.Wait BeklemeSuresi * 1000
        ' Tarih girişi
        tarih = InputBox("Tarih girin")
    Loop Until tarih <> ""
    
  
    element.SendKeys (keyObj.Control & "a")
 
    element.SendKeys (keyObj.Delete)
 
    element.SendKeys tarih
    
    element.SendKeys (keyObj.Enter)
    
  
    WebDriver.FindElementByXPath("//span[normalize-space()='Sorgula']").Click
  
    WebDriver.Wait BeklemeSuresi * 1000
    
    WebDriver.FindElementByXPath("//div[@class='epuitable-toolbar-right-side-export']//span[@class='epui-svg']//span//*[name()='svg']").Click
    WebDriver.Wait BeklemeSuresi * 1000
    WebDriver.FindElementByClass("epuitable-export-panel-item").Click
    WebDriver.Wait BeklemeSuresi * 1000
  
    WebDriver.Quit
    MsgBox "İşlem tamam"
End Sub
 
Son düzenleme:
Merhaba;

Bence en kolay ve olması gereken yöntem;

https://seffaflik.epias.com.tr/electricity-service/v1/generation/data/dpp

linkinden POST Requestte bulunmanız. Header a eğer gerekiyorsa referer, host gibi parametreleri ekleyin. En önemlisi olarak da istediğiniz kriterleri post data olarak eklemeniz. Mesela sizin ilk mesajda yazdığınıza göre post body ,content vs. vba da nasılsa artık aşağıdaki gibi olmalı.

JSON:
{
    "startDate": "2024-02-02T00:00:00+03:00",
    "endDate": "2024-02-15T00:00:00+03:00",
    "region": "TR1",
    "organizationId": 378,
    "uevcbId": 945,
    "page": {
        "number": 1,
        "size": 24,
        "sort": {
            "direction": "ASC",
            "field": "date"
        }
    }
}

Bu json veriyi browserdan request payload kısmından görebilirsiniz.

Tüm bunları yaparsanız istediğiniz filtreye göre veriler JSon formatında gelecektir ve istediğiniz yere alırsınız.
 
Son düzenleme:
Bu alternatif de VBA ile yapılmış olup; yukarıda benim 5 No'lu mesajımda ve beab05'in 7 No'lu mesajında belirtildiği gibi EPIAS'in sunucusuna POST metoduyla gerekli parametreleri gönderdikten sonra, sunucudan alınan cevabın ayıklanarak sayfaya aktarılmasını içermektedir...



Temp.gif

.
 
Son düzenleme:
Nasıl yaptığınızı öğrenmek istiyorum hocalarım çünkü bir kaç tane daha ekleme yapmak istiyorum
 
Muhtemelen Veysel Beyin "Power Query" metodunu öğrenmek için soruyorsunuzdur..... Kendisi vakit bulduğunda size yardımcı olur. Ya da siz internetten arama yaparak birşeyler bulabilirsiniz.

power query get json from url - Google Search


.
 
Tarayıcıda URL'in network hareketlerini inceleyince bulduğum değerler. Şirketin kod numarası, verilerin listeleneceği satır sayısı, sayfa sayısı gibi bilgiler. Bunlar, sizin tarayıcıda normal olarak sorgulama yaparken sayfada yaptığınız seçim kriterlerine ilişkin bilgiler.

Daha sonra bu bilgileri JSON formatına çevirip POST metoduyla sunucuya gönderip, JSON formatında geri dönen cevabı ayrıştırarak sayfaya yazıyoruz.

.
 
Sorgulamayı yaparken ihtiyaç duyulan, şirketlerin kimlik no yani "organizationld" verisini yine EPİAŞ'ın sitesindeki API'lerden birini kullanarak yine "POST" metoduyla elde ederek sayfaya yazdırabiliyoruz. Bu sorgulamayı yaparken, seçtiğimiz başlangıç ve bitiş tarihlerini girerek, bu tarihler arasındaki tüm şirketleri listeleyebiliyoruz... Tabii ki, güncel listeyi elde etmek için bitiş tarihi olarak içinde bulunduğumuz tarihi seçmek gerekir. Başlangıç tarihi çok önemli değil ama, sorgu süresini azaltmak için o da yine yakın geçmiş bir tarih seçmekte fayda var.

Elde edilen listedeki "organizationld" değerini kullanarak, daha önceki mesajımda belirttiğim sorgulama yapılabilir.

Buna ilişkin görsel aşağıda verilmiştir.



Temp.gif


.
 
Sorgulamayı yaparken ihtiyaç duyulan, şirketlerin kimlik no yani "organizationld" verisini yine EPİAŞ'ın sitesindeki API'lerden birini kullanarak yine "POST" metoduyla elde ederek sayfaya yazdırabiliyoruz. Bu sorgulamayı yaparken, seçtiğimiz başlangıç ve bitiş tarihlerini girerek, bu tarihler arasındaki tüm şirketleri listeleyebiliyoruz... Tabii ki, güncel listeyi elde etmek için bitiş tarihi olarak içinde bulunduğumuz tarihi seçmek gerekir. Başlangıç tarihi çok önemli değil ama, sorgu süresini azaltmak için o da yine yakın geçmiş bir tarih seçmekte fayda var.

Elde edilen listedeki "organizationld" değerini kullanarak, daha önceki mesajımda belirttiğim sorgulama yapılabilir.

Buna ilişkin görsel aşağıda verilmiştir.



Ekli dosyayı görüntüle 249864


.
teşekkür ederim hocam peki dosya paylaşabilir misiniz?
 
Geriye kalan "uevcbId" bilgisini de elde edecek çalışmayı da vakit bulup yaparsam, tam olarak herşey bitmiş olacak.

Tabii, bukadar emek harcanan bir çalışmayı da ancak ücreti karşılığında verebilirim....

Yukarıda başka alternatifler öneren arkadaşlar size ücretsiz yardım edebilirler belki ama, bende durum böyle....

.
 
Son eksik bilgi olan "UEVCB Id" bilgisini de yine EPİAŞ'ın sitesindeki API'lerden birini kullanarak elde ettim....

Sonuç olarak, ilk önce 15 No'lu mesajdaki sorguyla şirketin ID değerini listeden buluyoruz. Daha sonra aşağıdaki görselde belirtilen sorguyla, aranılan şirkete ait "UEVCB" listesini elde edip, buradan istenilen ID değerini de aldıktan sonra 9 No'lu mesajdaki görselde belirtilen sayfanın sağ tarafındaki parametreleri doldurup esas amacımıza yönelik nihai sorguyu çalıştırabiliyoruz....

Diğer parametreler yani; region, page-number ..... önemli değil, o şekilde kalabilir.

Web sayfalarındaki bilgiler herzaman statik tablolarda hazır olmadığı için aksi durumlarda, sayfaların hangi kaynaklardan ne şekilde beslendiğinin araştırılarak, geçerli bir yöntem kullanılması gerekmektedir. EPİAŞ'ın sayfası da buna güzel bir örnektir. Burada işin iyi tarafı, EPİAŞ sayfalarındaki veriler kamudan gizlenmeden, herkesin kendine göre bir yöntemle veri çekebilmesine olanak sağlanmış ve bununla ilgi yaklaşık 180 civarında API'yi kullanım metotlarını da açıklayan çok güzel bir dokümantasyonla kullanıcılara hizmet verilmektedir. Kullanıcı olarak bize geriye kalan, bu bilgileri harmanlayıp kendimize göre bir çalıştırma oluşturmaktır.

Ortaya çıkan çalışmayla, sorgulama için gerekli parametrelerin sunucuya POST edilerek, sunucudan geri dönen cevabın ayıklandıktan sonra sayfaya işlenmesi adına örnek bir çalışma olmuştur.


"UEVCB Id" verilerin alınmasına yönelik görsel aşağıdadır.....


Temp.gif
 
Son düzenleme:
@Haluk üstadım dediğiniz gibi çok güzel bir uygulama olmuş. Birkaç öneride bulunmak isterim.

startdate ve enddate alanlarına norma tarih formatında veri girilse yani kullanıcı 12-3 yazarsa 12.03.2024 gibi görünse. Tabii kod kısmında bu alan olması gerektiği formatta gidecek. Burada amaç kullanıcının kolayca tarih girmesini sağlamak. Belki de daha önemli olan kısmı ise ID alanları burası da açılan kutu olsa ve direkt ismiyle seçilse? ;)

Edit: Açılan kutu olunca userform oluyor değil mi? Bunu unutmuşum..:( Ama yine de bir şekilde ID isimlerini görmek iyi olacaktır
 
Değerli beab05 üstadım, öncelikle yorumların için teşekkür ederim.

Bahsettiğin tarzdaki iyileştirmelerin hepsi, (açılır kutu dahil) sayfa üzerinde UserForm kullanmadan veya isteğe bağlı olarak kullanarak yapılabilir. Söz konusu revizyonlar bir yerde isteğe ve zevke bağlı olduğu için tabii ki işin sonu olmaz.... Ben bu şekilde yani, daha ham haliyle bıraktım ki dosyayı kullanmak isteyen kendine göre geliştirsin. Yoksa, tıplı nihai sorgunun olduğu URL'deki gibi herşey açılır kutularla tek bir tablo üzerinde çalışılacak şekilde de geliştirilebilinir. Ama, dediğim gibi bu dosya ve içindeki kodlar biraz "takım çantası" gibi olsun istedim.... Yani, gerektiğinde ihtiyaç anında hızlıca bakıp, neyin nasıl olduğunu kavrayabilmek açısından el altında bulundurulacak bir dosya olsun isteim...

Selamlar,
.
 
Merhabalar

Dosya ekte yer alan içerisinde yaklaşık 30 tane ayrı liste vardır power query bunlardan tümülüne yenile tıkladığı zaman uzun sürmektedir ve hata gelen yetersiz bellek uyarı almaktadır. çözüm alabilirmiyiz sizden ricam şimdiden teşekkür ederim.
 

Ekli dosyalar

Geri
Üst