none
N11 soap ürün listesi çekme sorunu RRS feed

  • Soru

  • Merhaba,,,

    Aşağıdaki kod ile ürünleri çekebiliyorum ancak n11 sadece ilk sayfada 100 ürün çekmeye izin verdiği için sonraki ürünler için koda nasıl bişey eklemem gerekiyor acaba?

    Döngüyü bir türlü kuramadım... kafam çok karıştır. Yardımcı olacak arkadaşlara şimdiden teşekkürler...

     void N11_ÜRÜN_LİSTELEME(int pageSize)
            {
               
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.n11.com/ws/ProductService.wsdl");
                httpWebRequest.ContentType = "text/xml";
                httpWebRequest.Method = "POST";
    
                System.Xml.XmlDocument soapEnvelopeXml = new System.Xml.XmlDocument();
                soapEnvelopeXml.LoadXml("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sch=\"http://www.n11.com/ws/schemas\" > " +
                   "<soapenv:Header/>" +
                "<soapenv:Body>" +
                "<sch:GetProductListRequest>" +
                "<auth>" +
                "<appKey>" + GÖNDERİLECEKAPİANAHTARİ + "</appKey>" +
                "<appSecret>" + GÖNDERİLECEKAPİSİFRESİ + "</appSecret>" +
                "</auth>" +
                "<pagingData>" +
                "<currentPage> 1 </currentPage>" +
                "<pageSize>" + pageSize + "</pageSize>" +
                 "</pagingData>" +
                "</sch:GetProductListRequest>" +
                "</soapenv:Body>" +
                "</soapenv:Envelope>");
                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    soapEnvelopeXml.Save(streamWriter);
                }
                XmlDocument responseXml = new XmlDocument();
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
    
                    responseXml.LoadXml(streamReader.ReadToEnd());
                    XmlNode result = responseXml.DocumentElement.SelectSingleNode("//result");
                    XmlNodeList product = responseXml.DocumentElement.SelectNodes("//products/product");
                    
                    var status = result.SelectSingleNode("status").InnerText;
                    DataTable dt = new DataTable();
    
                 
                    for (int j = 0; j < product.Count; j++)
                    {
                       
                        var productNode = product[j];
                        var productSellerCode = productNode.SelectSingleNode("productSellerCode").InnerText;
                        listBox1.Items.Add(productSellerCode);
                       
                    }
                 
    
                }
            }


    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 09:36

Yanıtlar

  • Bunlar gizli seyler, bir an once sil ve değiştir:)

    Ben bu kodla 1090 tane aldim:

    void N11_ÜRÜN_LİSTELEME(int pageSize)
    {
    
    
    int productCount;
    int currentPage = 1;
    do
    {
    		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    
    		var httpWebRequest = (HttpWebRequest)WebRequest
    		.Create("https://api.n11.com/ws/ProductService.wsdl");
    		httpWebRequest.Headers.Add("SOAP:Action");
    		httpWebRequest.ContentType = "text/xml";
    		httpWebRequest.Method = "POST";
    		System.Xml.XmlDocument soapEnvelopeXml = new System.Xml.XmlDocument();
    		soapEnvelopeXml.LoadXml("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sch=\"http://www.n11.com/ws/schemas\" > " +
    		   "<soapenv:Header/>" +
    		"<soapenv:Body>" +
    		"<sch:GetProductListRequest>" +
    		"<auth>" +
    		$"<appKey>{GÖNDERİLECEKAPİANAHTARİ}</appKey>" +
    		$"<appSecret>{GÖNDERİLECEKAPİSİFRESİ}</appSecret>" +
    		"</auth>" +
    		"<pagingData>" +
    		$"<currentPage>{currentPage++}</currentPage>" +
    		$"<pageSize>{pageSize}</pageSize>" +
    		 "</pagingData>" +
    		"</sch:GetProductListRequest>" +
    		"</soapenv:Body>" +
    		"</soapenv:Envelope>");
    		
    		using (var streamWriter = httpWebRequest.GetRequestStream())
    		{
    			soapEnvelopeXml.Save(streamWriter);
    		}
    		XmlDocument responseXml = new XmlDocument();
    		var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    		using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    		{
    			responseXml.LoadXml(streamReader.ReadToEnd());
    			XmlNode result = responseXml.DocumentElement.SelectSingleNode("//result");
    			XmlNodeList product = responseXml.DocumentElement.SelectNodes("//products/product");
    
    			var status = result.SelectSingleNode("status").InnerText;
    			DataTable dt = new DataTable();
    			
    			productCount = product.Count;
    
    			for (int j = 0; j < product.Count; j++)
    			{
    
    				var productNode = product[j];
    				var productSellerCode = productNode.SelectSingleNode("productSellerCode").InnerText;
    				listBox1.Items.Add(productSellerCode);
    
    			}
    		}
    	} while (productCount == pageSize);
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen KOKSAL TUNA 8 Ekim 2019 Salı 18:50
    8 Ekim 2019 Salı 14:12
    Yanıtlayıcı

Tüm Yanıtlar

  • CurrentPage degerini arttırmayı denediniz mi?

    (Bu sekilde yazmak yerine web servis olarak ekleyebilirdiniz)



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    8 Ekim 2019 Salı 09:45
    Yanıtlayıcı
  • CurrentPage  ve ya pagesize değerini artırarak oluyor bir farkı yok ama o değeri döngüde nasıl artırabileceğimi bulamadım sorun o :(


    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 10:56
  • +1 ekleyerek olmuyor mu.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    8 Ekim 2019 Salı 11:05
    Yanıtlayıcı
  • +1 ile olacak ama döngüde nasıl artırıcam o +1i onu bilmiorum çünkü ilk 100 kaydı çekiyor sonra 2. 100 kayda gidiyor sonra 3. filan bunların hepsini tek seferde list e almam gerekiyor burada sorun yaşıyorum... 

    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 11:54
  • (Bu sekilde yazmak yerine web servis olarak ekleyebilirdiniz)

    Bu cümleyi dikkate almayı hiç düşünmediniz mi?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    8 Ekim 2019 Salı 12:38
    Moderatör
  • Anlamadım neresi sorun, gerci ben deneme sansin olmadan yazdım:

    void N11_ÜRÜN_LİSTELEME(int pageSize)
    {
    
    	ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    
    	var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.n11.com/ws/ProductService.wsdl");
    	httpWebRequest.ContentType = "text/xml";
    	httpWebRequest.Method = "POST";
    int productCount;
    int currentPage = 1;
    do
    {
    		System.Xml.XmlDocument soapEnvelopeXml = new System.Xml.XmlDocument();
    		soapEnvelopeXml.LoadXml("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sch=\"http://www.n11.com/ws/schemas\" > " +
    		   "<soapenv:Header/>" +
    		"<soapenv:Body>" +
    		"<sch:GetProductListRequest>" +
    		"<auth>" +
    		"<appKey>" + GÖNDERİLECEKAPİANAHTARİ + "</appKey>" +
    		"<appSecret>" + GÖNDERİLECEKAPİSİFRESİ + "</appSecret>" +
    		"</auth>" +
    		"<pagingData>" +
    		$"<currentPage>{currentPage++}</currentPage>" +
    		$"<pageSize>{pageSize}</pageSize>" +
    		 "</pagingData>" +
    		"</sch:GetProductListRequest>" +
    		"</soapenv:Body>" +
    		"</soapenv:Envelope>");
    		using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    		{
    			soapEnvelopeXml.Save(streamWriter);
    		}
    		XmlDocument responseXml = new XmlDocument();
    		var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    		using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    		{
    			responseXml.LoadXml(streamReader.ReadToEnd());
    			XmlNode result = responseXml.DocumentElement.SelectSingleNode("//result");
    			XmlNodeList product = responseXml.DocumentElement.SelectNodes("//products/product");
    
    			var status = result.SelectSingleNode("status").InnerText;
    			DataTable dt = new DataTable();
    			
    			productCount = product.Count;
    
    
    			for (int j = 0; j < product.Count; j++)
    			{
    
    				var productNode = product[j];
    				var productSellerCode = productNode.SelectSingleNode("productSellerCode").InnerText;
    				listBox1.Items.Add(productSellerCode);
    
    			}
    		}
    	} while (productCount == pageSize);
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    8 Ekim 2019 Salı 12:50
    Yanıtlayıcı
  • web servis olarak ekledim ilk olarak ama n11in web servislerinin bazıları sorunlu null değerler döndürüyor bende o yüzden bu şekle dönmek zorunda kaldım...

    Webservistede sizce aynı sorun oluşmuyacakmıydı?


    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 13:05
  • Problemi tam olarak anlatamadım sanırım kod üzerinden...

    Şöyle kısaca anlatıyım... N11de 1456 tane ürün var ben bu ürünlerin hepsinin var productSellerCode değerlerini alıp liste eklemek istiyorum. Ancak n11 koddanda anlaşılacağı üzere sadece 1 sayfada 100tane sonuç döünüyor...

    burdaki problem şu kaç sayfa olduğunu hesaplamak lazım 1456/100 den ondan sonrada değerleri 100er 100er liste eklemek gerekiyor bence...

    verdiğiniz kodda yine 100 sonuç döndü malesef :(


    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 13:11
  • GÖNDERİLECEKAPİANAHTARİ , GÖNDERİLECEKAPİSİFRESİ

    degerlerini verirseniz bakayım.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    8 Ekim 2019 Salı 13:33
    Yanıtlayıcı
  • Bunlar gizli seyler, bir an once sil ve değiştir:)

    Ben bu kodla 1090 tane aldim:

    void N11_ÜRÜN_LİSTELEME(int pageSize)
    {
    
    
    int productCount;
    int currentPage = 1;
    do
    {
    		ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    
    		var httpWebRequest = (HttpWebRequest)WebRequest
    		.Create("https://api.n11.com/ws/ProductService.wsdl");
    		httpWebRequest.Headers.Add("SOAP:Action");
    		httpWebRequest.ContentType = "text/xml";
    		httpWebRequest.Method = "POST";
    		System.Xml.XmlDocument soapEnvelopeXml = new System.Xml.XmlDocument();
    		soapEnvelopeXml.LoadXml("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sch=\"http://www.n11.com/ws/schemas\" > " +
    		   "<soapenv:Header/>" +
    		"<soapenv:Body>" +
    		"<sch:GetProductListRequest>" +
    		"<auth>" +
    		$"<appKey>{GÖNDERİLECEKAPİANAHTARİ}</appKey>" +
    		$"<appSecret>{GÖNDERİLECEKAPİSİFRESİ}</appSecret>" +
    		"</auth>" +
    		"<pagingData>" +
    		$"<currentPage>{currentPage++}</currentPage>" +
    		$"<pageSize>{pageSize}</pageSize>" +
    		 "</pagingData>" +
    		"</sch:GetProductListRequest>" +
    		"</soapenv:Body>" +
    		"</soapenv:Envelope>");
    		
    		using (var streamWriter = httpWebRequest.GetRequestStream())
    		{
    			soapEnvelopeXml.Save(streamWriter);
    		}
    		XmlDocument responseXml = new XmlDocument();
    		var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    		using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    		{
    			responseXml.LoadXml(streamReader.ReadToEnd());
    			XmlNode result = responseXml.DocumentElement.SelectSingleNode("//result");
    			XmlNodeList product = responseXml.DocumentElement.SelectNodes("//products/product");
    
    			var status = result.SelectSingleNode("status").InnerText;
    			DataTable dt = new DataTable();
    			
    			productCount = product.Count;
    
    			for (int j = 0; j < product.Count; j++)
    			{
    
    				var productNode = product[j];
    				var productSellerCode = productNode.SelectSingleNode("productSellerCode").InnerText;
    				listBox1.Items.Add(productSellerCode);
    
    			}
    		}
    	} while (productCount == pageSize);
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen KOKSAL TUNA 8 Ekim 2019 Salı 18:50
    8 Ekim 2019 Salı 14:12
    Yanıtlayıcı
  • kesin ben birşeyleri eksik yapıyorum kusura bakmayın ama...

    Bu sonucu alırken kullandığım kod buton clickte şöyle;

      N11_ÜRÜN_LİSTELEME(1); 

    bu şekilde yapınca 100 sonuç geliyor bunun neresini düzeltmeliyim acaba?


    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 14:37
  • Sen 100 ürüne izin veriyor demistin, yani pageSize 100.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    8 Ekim 2019 Salı 15:31
    Yanıtlayıcı
  • Çok teşekkürler sorun çözülmüştür. Ancak bir dipnot ;

    int currentPage = 1; değeri 0 olmalı

    while (productCount == 100);

    Bu şekilde kodu düzeltirseniz belki başka birilerinede yardımı dokunur...

    Tekrardan teşekkürler...



    koksal_tuna@hotmail.com

    8 Ekim 2019 Salı 18:49
  • O dogru, değişecek bir şey yok. Herkes pageSize 100 kullanmak zorunda degil.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    8 Ekim 2019 Salı 19:46
    Yanıtlayıcı