• DİKKAT

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

Sorgu Düzenleyici

Katılım
8 Aralık 2017
Mesajlar
86
Merhabalar Aşağıdaki Kod İle İş Bankası ndan bilgi çekmek istiyorum ama birtürlü başaramadım yardımcı olabilirmisiniz.
Site Tablo Adını bilmiyorum nasıl alacağımıda çözemedim.


Kod:
let
    Kaynak = Web.Page(Web.Contents("https://www.isbank.com.tr/yatirim-fonu-ve-altin")),
    Data = Kaynak{0}[Data],
    forms_table = Html.Table(Data, {{"forms_table", [Id="forms_table_id"]}})
in
    forms_table
 
Yardımınız için Teşekkürler dediğiniz şekilde 1. ve 2. Adresten Veri Çekmeye Çalıştığımda aşağıdaki şekilde hata almaktayım.

The requested URL was rejected. Please consult with your administrator.

Your support ID is: < 4931210952684992573>

[Go Back]

Bu Şekilde Sonuç Aldım 2.Adresde ise



Merhaba.
Veri almak istediğiniz adres frame ile yayınlıyor.

Ana adres olan aşağıdaki 2. adresi görüntüleyebilmek için Önce 1. Adresi açtırmak sonrasında 2. adresi açtırmak gerek.

Bu olayı geçerseniz ilgili tablonun id'si "TblGeneral" şeklinde.

1. Adres: https://www.isbank.com.tr/internet/...rimFonuAltinFiyatlari.ascx&MainPageVersion=V2
2. Adres: https://www.isbank.com.tr/internet/...Exists=true&LangCode=tr-TR&MainPageVersion=V2
 
Şu Şekilde Kod Oluşturdum Doğrumu Sizce ?
Aşağıdaki Kodu Yazınca Expression.Error: 'Html.Table' adı tanınmadı. Doğru yazıldığından emin olun. uyarısı veriyor

let
// İlk Adresi Açmak
Kaynak1 = Web.Page(Web.Contents("https://www.isbank.com.tr/internet/...rimFonuAltinFiyatlari.ascx&MainPageVersion=V2")),

// İlk Adresten Çıkan Veriyi Almak
Data1 = Kaynak1{0}[Data],

// İkinci Adresi Açmak
Kaynak2 = Web.Page(Web.Contents("https://www.isbank.com.tr/internet/...Exists=true&LangCode=tr-TR&MainPageVersion=V2")),

// İkinci Adresten Çıkan Veriyi Almak
Data2 = Kaynak2{0}[Data],

// TblGeneral Tablosunu Bulmak
forms_table = Html.Table(Data2, {{"TblGeneral", [Id="TblGeneral"]}})
in
forms_table





Merhaba.
Veri almak istediğiniz adres frame ile yayınlıyor.

Ana adres olan aşağıdaki 2. adresi görüntüleyebilmek için Önce 1. Adresi açtırmak sonrasında 2. adresi açtırmak gerek.

Bu olayı geçerseniz ilgili tablonun id'si "TblGeneral" şeklinde.

1. Adres: https://www.isbank.com.tr/internet/...rimFonuAltinFiyatlari.ascx&MainPageVersion=V2
2. Adres: https://www.isbank.com.tr/internet/...Exists=true&LangCode=tr-TR&MainPageVersion=V2
 
Dediğim gibi frame ile veri yayınlıyorlar.
2. adrese girince hata veriyor ama önce 1. adrese girip sonra 2. adrese girince site açılıyor.

Ha Excel olarak sıkıntı çıkıyor olabilir, bilemedim. onu üstadlar yardımcı olurlar diye düşünüyorum.
Kodlarınızı, örnek dosyanızı ekleyin yanlış yapılan birşeyde olabilir ona göre bakarlar.
 
Ben de alternatif yaptım, kendime yaptığım eklentiye test amaçlı ekledim sadece.. Yalın halde paylaşabileceğim bir dosya yok maalesef..
Bu arada veriler asenkron geliyor ;)


Animation.gif
 
Son düzenleme:
Çözümü neden olmasın ki @Haluk bey de sanırım vba ile yapmıştır..

Ben csharp ile aldım ve excele verdim ama aynı mantıkla vba ile de olur...


Siz sadece aynı fonksiyon içinde (aynı httpclient, vba da neyse artık) ilk url ve 2. url yi alacaksınız ve dönen html kodlarını parse edip excele yerleştireceksiniz. Amacımız ana url den session id yi alıp 2. url request edebilmek için.. Bu oto yapılıyor merak etmeyin..)

Bu arada url verilerini alırken header a "host" parametresini de eklemeyi unutmayın, yanlış hatırlamıyorsam ben alırken bunu istiyordu.. Host değerini browserda developer sekmesinde görebilirsiniz.
 
Valla ben 2-3 değişik kod denedim....... hepsinde de; verileri alıyor, bir süre sonra almamaya başlıyor ve oturumun sonlandığına ilişkin başka bir sayfaya yönlendiriyor.

En son XMLHTTP ile GET ve POST metotlarını kullandım, durum aynı ...... Cookie, request-id falan feşmekan işe yaramadı ya da ben kıvıramadım.

Stabil olmadı yani, ne zaman çalışacağı belli olmuyor.....

.
 
Valla ben 2-3 değişik kod denedim....... hepsinde de; verileri alıyor, bir süre sonra almamaya başlıyor ve oturumun sonlandığına ilişkin başka bir sayfaya yönlendiriyor.

En son XMLHTTP ile GET ve POST metotlarını kullandım, durum aynı ...... Cookie, request-id falan feşmekan işe yaramadı ya da ben kıvıramadım.

Stabil olmadı yani, ne zaman çalışacağı belli olmuyor.....

.

Örnek dosya atarsanız belki stabil olması açısından bilen kişi yorumlayarak çözüm üretebilir diye düşünüyorum.
 
Örnek dosya atarsanız belki stabil olması açısından bilen kişi yorumlayarak çözüm üretebilir diye düşünüyorum.


Zaten nasıl bir kod olduğunu yukarıdaki mesajımda anlattım. Bahsettiğiniz olası bilen kişi için gayet yeterli bir açıklama ...

.
 
Zaten nasıl bir kod olduğunu yukarıdaki mesajımda anlattım. Bahsettiğiniz olası bilen kişi için gayet yeterli bir açıklama ...

.
:) Nasıl bir kod kullandınız demedim zaten, açıklayıcı bilgi vermişsiniz. Ama maksat yardımlaşmaysa eğer örnek dosyayı veya kodu eklerseniz yeniden keşfe gerek kalmadan kontrol edilip hata/ekleme/düzeltme ne gerekiyorsa yardım edecek olan kişide yorumunu katabilir diye söylemiştim.
 
Aşağıdaki gibi sorunsuz alınıyor aslında... Ben cSharp ile yaptım ama okuması ve yorumlaması kolay bir yapıda. Sadece "SonIframeUrl" yi static olarak yaptım yani aslında bir önceki responseden alınıp redirect url ile alınması daha doğru olabilir çünkü değişebilir.. Bu yapıyla bende stabil çalışıyor..

C#:
public async Task<object> GetIsBank()
{
    try
    {
        HttpClient httpClientim = new HttpClient();

        string baseUrl = "https://www.isbank.com.tr/yatirim-fonu-ve-altin";

        string host = "www.isbank.com.tr";


        HttpResponseMessage response = await httpClientim.GetAsync(baseUrl);

        httpClientim.DefaultRequestHeaders.Host = host;

        if (response.IsSuccessStatusCode)
        {
            string htmlContent = await response.Content.ReadAsStringAsync();


            string iframeUrl = GetIframeUrl(htmlContent); // sesssion id için bu url yi alıyoruz.

            if (!string.IsNullOrEmpty(iframeUrl))
            {

                HttpResponseMessage iframeResponse = await httpClientim.GetAsync(iframeUrl);

                // session id yi cookiye burda oto olarak set ediyoruz..

                if (iframeResponse.IsSuccessStatusCode)
                {

                    string sonIframeUrl = "https://www.isbank.com.tr/internet/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=true&LangCode=tr-TR&MainPageVersion=V2";

                    HttpResponseMessage sonResponse = await httpClientim.GetAsync(sonIframeUrl);

                    if (sonResponse.IsSuccessStatusCode)
                    {

                        string sonContent = await sonResponse.Content.ReadAsStringAsync();

                        return ExportTableToExcel(sonContent);
                    }
                }

            }

        }

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    return "Hata!!";
}
 
Teşekkür Ederim Elinize Sağlık Bu Kodu Excel Sorgu Modülünde deneyince "Expression.SyntaxError: Eof belirteci beklendi." Bu Hatayı Alıyorum doğru yerdemi kullanıyorum tam olarak bilmiyorum


Aşağıdaki gibi sorunsuz alınıyor aslında... Ben cSharp ile yaptım ama okuması ve yorumlaması kolay bir yapıda. Sadece "SonIframeUrl" yi static olarak yaptım yani aslında bir önceki responseden alınıp redirect url ile alınması daha doğru olabilir çünkü değişebilir.. Bu yapıyla bende stabil çalışıyor..

C#:
public async Task<object> GetIsBank()
{
    try
    {
        HttpClient httpClientim = new HttpClient();

        string baseUrl = "https://www.isbank.com.tr/yatirim-fonu-ve-altin";

        string host = "www.isbank.com.tr";


        HttpResponseMessage response = await httpClientim.GetAsync(baseUrl);

        httpClientim.DefaultRequestHeaders.Host = host;

        if (response.IsSuccessStatusCode)
        {
            string htmlContent = await response.Content.ReadAsStringAsync();


            string iframeUrl = GetIframeUrl(htmlContent); // sesssion id için bu url yi alıyoruz.

            if (!string.IsNullOrEmpty(iframeUrl))
            {

                HttpResponseMessage iframeResponse = await httpClientim.GetAsync(iframeUrl);

                // session id yi cookiye burda oto olarak set ediyoruz..

                if (iframeResponse.IsSuccessStatusCode)
                {

                    string sonIframeUrl = "https://www.isbank.com.tr/internet/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=true&LangCode=tr-TR&MainPageVersion=V2";

                    HttpResponseMessage sonResponse = await httpClientim.GetAsync(sonIframeUrl);

                    if (sonResponse.IsSuccessStatusCode)
                    {

                        string sonContent = await sonResponse.Content.ReadAsStringAsync();

                        return ExportTableToExcel(sonContent);
                    }
                }

            }

        }

    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    return "Hata!!";
}
 
Teşekkür Ederim Elinize Sağlık Bu Kodu Excel Sorgu Modülünde deneyince "Expression.SyntaxError: Eof belirteci beklendi." Bu Hatayı Alıyorum doğru yerdemi kullanıyorum tam olarak bilmiyorum

Merhaba;

Bu kodu Excel'de doğrudan kullanamazsınız. "Excel sorgu modülü" dediğinizin ne olduğunu bilmiyorum. Ben üstünde çalıştığım Excel eklentisi için kodu ekledim. Excel eklentilerinde birçok dil kullanılabiliyor.
 
Merhaba,
Ekte paylaştığım dosya da Haluk Bey'in 12. mesajda bahsettiği gibi dengeli değil, bazen çalışıp bazen çalışmıyor. Ancak belki bir müddet işinizi görür.
İyi çalışmalar...
 

Ekli dosyalar

Geri
Üst