İnternetten Veri Alma

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
Merhaba

Şirketlere ait mali tablolar, fiyatları ve hedef fiyatları @Haluk Bey' in yönlendirmesiyle Json yöntemiyle çekiyorum
Aşağıdaki alanları da aynı yöntemle alınabiliyor mu diye epeyce baktım ama sitenin arka planında bunların tutulduğu yeri göremedim, sadece dış veri al yöntemiyle aldırıyor
Bu alanları tablo haricinde alma yöntemi var mıdır


252364

252365
 

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
Size 100 $ değerinde bilgi;

- Aşağıdaki kodda belirtilen URL ile sözkonusu veriler JSON formatında alınabilir,

- Burada önemli olan URL'in kendisi ve bu URL'e yine kodda belirtilen JSON formatındaki "PayLoad" verisini "POST" metoduyla sunucuya "JSON Formatında" bir istek gönderileceği hususunu da belirterek gönderip, geri dönen cevabı (koddaki strJSON değişkeninin içeriği) ayıklayarak, sayfaya istediğiniz gibi yazdırmaktır.

Aşağıdaki kod, verileri "MsgBox" fonksiyonuyla göstermektedir, ayıklayıp sayfaya yazdırma kısmını da siz yaparsınız artık....

C#:
Sub Test()
'   Haluk - 30/06/2024
'
    Dim objHTTP As Object, strURL As String, PayLoad As String, strJSON As String
  
    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
  
    strURL = "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetSermayeArttirimlari"
  
  
    PayLoad = "{""hisseKodu"": ""ADEL"", ""hisseTanimKodu"": """", ""yil"":2024, ""zaman"":""HEPSI"", ""endeksKodu"":""09"",""sektorKodu"":""""}"
  
    objHTTP.Open "POST", strURL, False
    objHTTP.SetRequestHeader "content-type", "application/json"
    objHTTP.send PayLoad
  
    strJSON = objHTTP.responseText
  
    MsgBox strJSON
  
    Set objHTTP = Nothing
End Sub
.
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
@Haluk Bey

Teşekkür ederim
Ancak sizin paylaştığınız sermaye artırımı sayfası için, "Temettü Gerçekleşen/Planlanan " ve "Yabancı Oranları" sayfalarındaki veriler lazım

Yabacı oranlar için bu link var istenen veri gelmiyor

/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetYabanciOranlarXHR
 

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
Eğer yine yanlış anlamadıysam, aradığınız veriler bu kodla alınabiliyor......

C#:
Sub Test3()
'   Haluk - 30/06/2024
    
    Dim xmlHTTPReq As Object
    Dim HTMLdoc As Object
    Dim strURL As String
    Dim noRows As Integer, i As Integer, j As Integer
    
    Set xmlHTTPReq = CreateObject("MSXML2.XMLHTTP.6.0")
    Set HTMLdoc = CreateObject("HTMLFILE")

    strURL = "https://www.isyatirim.com.tr/tr-tr/analiz/hisse/Sayfalar/sirket-karti.aspx?hisse=ADEL"
    xmlHTTPReq.Open "GET", strURL, False
    xmlHTTPReq.send
   
    If xmlHTTPReq.Status = 200 Then
        Range("A1:H" & Rows.Count) = ""
        HTMLdoc.body.innerHTML = xmlHTTPReq.responseText
        HTMLdoc.Close
        
        Set Tables = HTMLdoc.getElementsByTagName("tbody")
        Set myTable = Tables(12)

        noRows = myTable.Rows.Length
        
        For j = 0 To myTable.Rows(0).Cells.Length - 1
            If j >= 2 And j < 7 Then
                Cells(1, j + 1) = Tables(11).Rows(i).Cells(j).innerText + 0
            Else
                Cells(1, j + 1) = Tables(11).Rows(i).Cells(j).innerText
            End If
        Next
        
        For i = 0 To noRows - 1
            For j = 0 To myTable.Rows(i).Cells.Length - 1
                If j >= 2 And j < 7 Then
                    Cells(i + 2, j + 1) = myTable.Rows(i).Cells(j).innerText + 0
                Else
                    Cells(i + 2, j + 1) = myTable.Rows(i).Cells(j).innerText
                End If
            Next
        Next
    End If
    
    Set Tables = Nothing
    Set myTable = Nothing
    Set HTMLdoc = Nothing
    Set xmlHTTPReq = Nothing
End Sub
.
 
Son düzenleme:

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
çok teşekkür ederim, evet istediğim buydu
Allah razı olsun
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
12 tabloyu son verdiğinizden aldım
17 tablo için önceden verdiğiniz koddan aldım, son verdiğinizde değiştirdim ama beceremedim

Belirttiğiniz linkteki konu bana ait değil
 

Ekli dosyalar

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
@Haluk Bey Merhaba

Verdiğiniz kodlarla veriyi alıyorum, Başlık kısmında bulunan tarih alanı sitede seçilebilir durumda, bunu kod içerisinde yapmak mümkün müdür


252434
 

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
Aşağıdaki kodla verileri aldıktan sonra ayıklarsınız...

C#:
Sub Tes4()
'   Haluk - 05/07/2024
'
    Dim objHTTP As Object, strURL As String, PayLoad As String, strJSON As String

    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")

    strURL = "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetYabanciOranlarXHR"

    PayLoad = "{""baslangicTarih"":""02-07-2024"",""bitisTarihi"":""04-07-2024"",""sektor"":null,""endeks"":""09"",""hisse"":""EREGL""}"

    objHTTP.Open "POST", strURL, False
    objHTTP.SetRequestHeader "content-type", "application/json"
    objHTTP.send PayLoad

    strJSON = objHTTP.responseText

    MsgBox strJSON

    Set objHTTP = Nothing
End Sub
.
 
Son düzenleme:

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
Verilerin ayıklanmasını yapamadıysanız, daha önceki konu için aşağıdaki linkte yer alan dosyayı kullanın.




Orada, "Module2" içindeki kodları silin ve aşağıdakini kullanın....

C#:
Sub Test5()
    Dim objHTTP As Object, strURL As String, PayLoad As String
    Dim Json As Object, Item As Object, i As Integer
 
    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
 
    strURL = "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetYabanciOranlarXHR"
 
    PayLoad = "{""baslangicTarih"":""02-07-2024"",""bitisTarihi"":""04-07-2024"",""sektor"":null,""endeks"":""09"",""hisse"":""EREGL""}"
 
    objHTTP.Open "POST", strURL, False
    objHTTP.SetRequestHeader "content-type", "application/json"
    objHTTP.send PayLoad
      
    Set Json = ParseJson(objHTTP.responseText)
    i = 2
    
    For Each Item In Json("d")
        Range("A" & i) = Item("HISSE_KODU")
        Range("B" & i) = Item("PRICE_TL")
        Range("C" & i) = Item("DEGISIM")
        Range("D" & i) = Item("ETKI")
        Range("E" & i) = Trim(Item("HISSE_TANIM"))
        i = i + 1
    Next
End Sub
.
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
Teşekkür ederim, bende ona bakıyordum
Muhtemelen yapamazdım
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
@Haluk Bey Merhaba

Hisse isimin değişken yapmak istedim, Normalde sayfa ismi ve hücre adresi " " içerisinde yazılır, burada hata veriyor
Aşağıdaki gibi yapınca makro çalışıyor, diğer yandan muhtemelen hücreyi göremediği için birşey getirmiyor
Şirket ismini değişken nasıl yapılabilir

Kod:
Sub Yabancı_Oranı_1()
    Dim objHTTP As Object, strURL As String, PayLoad As String
    Dim JSon As Object, Item As Object, i As Integer
    
    tStart = Timer
    
    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
 
    strURL = "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetYabanciOranlarXHR"
 
    PayLoad = "{""baslangicTarih"":""03-07-2024"",""bitisTarihi"":""04-07-2024"",""sektor"":null,""endeks"":""09"",""hisse"":""Sheets(Sayfa1).Range(H1)""}"
    
    objHTTP.Open "POST", strURL, False
    objHTTP.SetRequestHeader "content-type", "application/json"
    objHTTP.send PayLoad
      
    Set JSon = ParseJson(objHTTP.responseText)
    i = 2
    
    For Each Item In JSon("d")
        Range("A" & i) = Item("HISSE_KODU")
        Range("B" & i) = Item("YAB_ORAN_START")
        Range("C" & i) = Item("YAB_ORAN_END")
        Range("D" & i) = Item("DEGISIM")
        Range("E" & i) = Item("ETKI")
        i = i + 1
    Next
    
    tEnd = Timer
    
    myMsg = "Veriler " & Format(tEnd - tStart, "0.00") & " saniyede alınmıştır..."
            
    MsgBox myMsg, vbInformation, "Bilgi..."
    
End Sub
 

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
Kusura bakmayın, bu kadarını yapabilmeniz gerekir diye düşünüyorum....



.
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
internet sitelerine baktım, PayLoad için değişken yapmayı bulamadım
Önceki süreçler için teşekkür ederim
 

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
Örneğin aktif sayfanın K2 hücresinde hisse kodu olarak EREGL yazıyorsa;

C#:
    PayLoad = "{""baslangicTarih"":""02-07-2024"",""bitisTarihi"":""04-07-2024"",""sektor"":null,""endeks"":""09"",""hisse"":""" & Range("K2") & """}"

Eğer K2 hücresi boşsa, bütün şirketlere ait veriler alınır...

.
 
Son düzenleme:

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
Yardımınız için teşekkür ederim
Aşağıdaki gibi hata verdi

252440

252441
 

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
Sunucudan JSON değil de HTML formatında bir cevap aldığınıza göre muhtemelen bir hata mesajı içeriyordur aldığınız cevap.

Belki sunucuya çok fazla istek yolladıysanız, IP adresiniz belli bir süreliğine yasaklanmış olabilir.... ya da başka bir hata yapıyorsunuz. Ben size bendeki çalışan dosyayı vereyim, deneyin. Eğer yine hata alırsanız büyük ihtimalle dediğim gibi IP adresiniz yasaklanmıştır.

.
 

Ekli dosyalar

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
Bu arada, şimdi dikkatimi çekti.... 16 No'lu mesaja eklediğiniz ekran görüntüsünde;

Kod:
Payload = PayLoad .....
yazmışsınız, muhtemelen hata nedeni bu yazım hatasıdır..

.
 

mekist

Altın Üye
Katılım
13 Ağustos 2008
Mesajlar
326
Excel Vers. ve Dili
Office 365 ProPlus-Türkçe
Altın Üyelik Bitiş Tarihi
03-10-2026
@Haluk Bey

bende onu sonradan fark ettim, çok soğolun

Ekteki gibi döngü kurdum, daha kısa yolu var mıdır bilemedim
 

Ekli dosyalar

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
C#:
Sub Test7()
    Dim objHTTP As Object, strURL As String, PayLoad As String
    Dim Json As Object, Item As Object, j As Integer
        
    Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
 
    strURL = "https://www.isyatirim.com.tr/_layouts/15/IsYatirim.Website/StockInfo/CompanyInfoAjax.aspx/GetYabanciOranlarXHR"
    
    For j = 2 To Range("F" & Rows.Count).End(xlUp).Row
        PayLoad = "{""baslangicTarih"":""" & Range("F" & j) & """,""bitisTarihi"":""" & Range("G" & j) & """,""sektor"":null,""endeks"":""09"",""hisse"":""" & Range("I1") & """}"
        
        objHTTP.Open "POST", strURL, False
        objHTTP.SetRequestHeader "content-type", "application/json"
        objHTTP.send PayLoad
          
        Set Json = ParseJson(objHTTP.responseText)
        
        For Each Item In Json("d")
            Range("A" & j) = Item("HISSE_KODU")
            Range("B" & j) = Item("YAB_ORAN_START")
            Range("C" & j) = Item("YAB_ORAN_END")
            Range("D" & j) = Item("DEGISIM")
            Range("E" & j) = Item("ETKI")
        Next
    Next
End Sub
.
 
Son düzenleme:
Üst