Sorgu Düzenleyici

Katılım
8 Aralık 2017
Mesajlar
86
Altın Üyelik Bitiş Tarihi
08/12/2018
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
 

BaY_KaPTaN

Kürşat
Altın Üye
Katılım
4 Mart 2008
Mesajlar
85
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-10-2028
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/MainPageEnter.aspx?src=YatirimFonuAltinFiyatlari.ascx&MainPageVersion=V2
2. Adres: https://www.isbank.com.tr/internet/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=true&LangCode=tr-TR&MainPageVersion=V2
 
Katılım
28 Ağustos 2013
Mesajlar
19
Excel Vers. ve Dili
Türkçe
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/MainPageEnter.aspx?src=YatirimFonuAltinFiyatlari.ascx&MainPageVersion=V2
2. Adres: https://www.isbank.com.tr/internet/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=true&LangCode=tr-TR&MainPageVersion=V2
 
Katılım
28 Ağustos 2013
Mesajlar
19
Excel Vers. ve Dili
Türkçe
Ş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/MainPageEnter.aspx?src=YatirimFonuAltinFiyatlari.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/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=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/MainPageEnter.aspx?src=YatirimFonuAltinFiyatlari.ascx&MainPageVersion=V2
2. Adres: https://www.isbank.com.tr/internet/isModules/FiyatOran/Container.aspx?trkd=*GH00&OverflowExists=true&LangCode=tr-TR&MainPageVersion=V2
 

BaY_KaPTaN

Kürşat
Altın Üye
Katılım
4 Mart 2008
Mesajlar
85
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-10-2028
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
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:

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Çö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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.....

.
 

BaY_KaPTaN

Kürşat
Altın Üye
Katılım
4 Mart 2008
Mesajlar
85
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-10-2028
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Ö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 ...

.
 

BaY_KaPTaN

Kürşat
Altın Üye
Katılım
4 Mart 2008
Mesajlar
85
Excel Vers. ve Dili
Office 2007 Türkçe
Altın Üyelik Bitiş Tarihi
04-10-2028
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.
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
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!!";
}
 
Katılım
28 Ağustos 2013
Mesajlar
19
Excel Vers. ve Dili
Türkçe
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!!";
}
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
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.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,334
Excel Vers. ve Dili
2007 Türkçe
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

Üst