Xml Web Servisi Soap Sorgu İle Veri Transferi

04/11/2024, 23:13

mozuer

Arkadaşlar,
EPDK üzerinden fiyatları Vba ile tabloya almak istiyorum.
Aşağıdaki link EPDK tarafından paylaşılan linktir.

http://lisansws.epdk.gov.tr/services/bil...ulten?wsdl

Aşağıdaki linkte de örnek kılavuz paylaşılmış.
https://www.epdk.gov.tr/Detay/DownloadDo...r7hLh9KdqE=

Eklerde de textleri paylaşıyorum.

Herhangi bir tarihe göre veriler Vba ile alınabilir mi?
05/11/2024, 11:46

atoykan

Soap bağlantıları TLS1.2 kullanır, bilgisayarınızın bunu desteklediğinden ve açık olduğundan emin olmanız ve registryde TLS1.2 kaydı için Client ve Server anahtarlarının mevcut ve Enabled olması gerekir. Soap sorgusu kulllanılan web servislerinde genel olarak isteğin doğrudan tarayıcı veya belirli bir istemci dışında yapılması engellenir. Yoğunluk nedeni ile servisi kontrol etme ve kodları inceleme fırsatım olmadı ancak bu nedenle Vba ile alma ihtimaliniz olmayabilir. Müsait bir zamanda bakmaya çalışacağım ama hemen çözüm geliştirmenize yardımcı olmam şu an mümkün değil; diğer hocalarımızdan konuya hakim olanlar da yardımcı olmaya çalışabilirler.
05/11/2024, 13:40

mozuer

Yanıtınız için teşekkür ederim...
05/11/2024, 21:38

hedefkaya

Mssql kullaanıyorsanız
Procedürle xml veryi tabloya alıp tabloda isteğiniz işlemleri yapabilirsiniz
15/11/2024, 10:45

atoykan

    On Error GoTo ErrorHandler
   
    Dim xmlHttp As Object, xmlDoc As Object, xmlNodes As Object, node As Object
    Dim soapReq As String, soapResp As String
    Dim db As DAO.Database
    Dim tbl As DAO.Recordset
    Dim yil As String, ay As String, YakitTipi As String

    yil = Me.epSenesi.Value
    ay = Me.epAyi.Value
    YakitTipi = "Motorin"

    Set db = CurrentDb
    Set tbl = db.OpenRecordset("TbEpdk", dbOpenDynaset)

    'SOAP isteğini tanımlama
    Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
   
    soapReq = _
        "<?xml version=""1.0"" encoding=""utf-8""?>" & _
        "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:gen=""http://genel.service.ws.epvys.g222.tubitak.gov.tr/"">" & _
        "   <soapenv:Header/>" & _
        "   <soapenv:Body>" & _
        "      <gen:genelSorgu>" & _
        "         <sorguNo>71</sorguNo>" & _
        "         <parametreler>" & Format(yil, "yyyy") & "/" & Format(ay, "mm") & "</parametreler>" & _
        "      </gen:genelSorgu>" & _
        "   </soapenv:Body>" & _
        "</soapenv:Envelope>"
   
    'SOAP isteğini gönderme
    With xmlHttp
        .Open "POST", "https://lisansws.epdk.org.tr/services/bildirimPetrol8FirmaBulten.bildirimPetrol8FirmaBultenHttpSoap11Endpoint", False
        .setRequestHeader "Content-Type", "text/xml; charset=utf-8"
        .setRequestHeader "SOAPAction", "genelSorgu"
        .Send soapReq
    End With
   
    soapResp = xmlHttp.responseText
   
    Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDoc.LoadXML soapResp
    xmlDoc.async = False

    Set xmlNodes = xmlDoc.getElementsByTagName("PetrolPiyasasiEnYuksekHacimliSekizFirmaninAkaryakitFiyatlari")
    For Each node In xmlNodes
        If node.SelectSingleNode("YakitTipi").Text = YakitTipi Then
            tbl.AddNew
            tbl!Fiyat = node.SelectSingleNode("Fiyat").Text
            tbl!Senesi = Format(yil, "yyyy")
            tbl!Ayi = Format(ay, "mm")
            tbl.Update
        End If
    Next node

    'MsgBox "Veriler başarıyla alındı ve tabloya kaydedildi.", vbInformation
   
    tbl.Close
    Set tbl = Nothing
    Set db = Nothing
    Set xmlHttp = Nothing
    Set xmlDoc = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "Hata oluştu: " & Err.Description, vbCritical
benzeri bir kod deneyebilirsiniz. Kısa bir aralıkta bakmaya çalıştım fakat servis çalışmıyor hatası alıyorum ve servisleri vs inceleyecek fırsatım olmadı ne yazık ki ama konuda sürüncemede kalmasın diyerek en azından size fikir vermesi açısından paylaşmış olayım. Ancak belirttiğim gibi Soap sorgusu kulllanılan web servislerinde genel olarak isteğin doğrudan tarayıcı veya belirli bir istemci dışında yapılması engellenir bu nedenle Vba ile sonuç alamama ihtimaliniz var.