Search code examples
c#ebay-api

c# : how to get all item url based on a keyword using FindingAPI of ebay


I am using the code below using FindingAPI of Ebay to get all items link of Ebay matching a keyword . In this case "gruen watch" is the keyword. This code doesn't show more than 100 items link . How can I modify it to show all items link ??

**I have replaced my original appid

Program.cs

namespace ConsoleApplication1
{

class Program
{

    static void Main(string[] args)
    {

        TextWriter tw = new StreamWriter("link.txt");
        using (FindingServicePortTypeClient client = new FindingServicePortTypeClient())
        {

            MessageHeader header = MessageHeader.CreateHeader("My-CustomHeader", "http://www.mycustomheader.com", "Custom Header");
            using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
            {

                OperationContext.Current.OutgoingMessageHeaders.Add(header);
                HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
                httpRequestProperty.Headers.Add("X-EBAY-SOA-SECURITY-APPNAME", "MY-APP-ID");
                httpRequestProperty.Headers.Add("X-EBAY-SOA-OPERATION-NAME", "findItemsByKeywords");
                httpRequestProperty.Headers.Add("X-EBAY-SOA-GLOBAL-ID", "EBAY-US");
                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;


                FindItemsByKeywordsRequest request = new FindItemsByKeywordsRequest();
                request.keywords = "gruen watch";

                PaginationInput pagination = new PaginationInput();
                pagination.entriesPerPageSpecified = true;
                pagination.entriesPerPage = 250;
                pagination.pageNumberSpecified = true;
                pagination.pageNumber = 10;
                request.paginationInput = pagination;




                FindItemsByKeywordsResponse response = client.findItemsByKeywords(request);


                foreach (var item in response.searchResult.item)
                {

                    //Console.WriteLine(item.title);
                    tw.WriteLine(item.viewItemURL.ToString());
                    Console.WriteLine(item.viewItemURL.ToString());

                }


            }

        }

        tw.Close();

        Console.ReadKey();

    }

}

app.config is here

here is the solution I have made :

namespace ConsoleApplication1

{ 



class Program

{



    static void Main(string[] args)

    {



        TextWriter tw = new StreamWriter("1001.txt");

        using (FindingServicePortTypeClient client = new FindingServicePortTypeClient())

        {



            MessageHeader header = MessageHeader.CreateHeader("My-CustomHeader", "http://www.mycustomheader.com", "Custom Header");

            using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))

            {



                OperationContext.Current.OutgoingMessageHeaders.Add(header);

                HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();

                httpRequestProperty.Headers.Add("X-EBAY-SOA-SECURITY-APPNAME", "MYAPPID");

                httpRequestProperty.Headers.Add("X-EBAY-SOA-OPERATION-NAME", "findItemsByKeywords");

                httpRequestProperty.Headers.Add("X-EBAY-SOA-GLOBAL-ID", "EBAY-US");

                OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;





                FindItemsByKeywordsRequest request = new FindItemsByKeywordsRequest();



                request.keywords = "gruen watch";

                FindItemsByKeywordsResponse check = client.findItemsByKeywords(request);

                int totalEntries = check.paginationOutput.totalEntries;

                int cnt = 0;

                int totalPages = (int)Math.Ceiling((double)totalEntries/100.00);



                bool flag = true;



                for (int curPage = 1; curPage <= totalPages; curPage++)

                {

                    PaginationInput pagination = new PaginationInput();



                    pagination.entriesPerPageSpecified = true;

                    pagination.entriesPerPage = 100;

                    pagination.pageNumberSpecified = true;

                    pagination.pageNumber = curPage;

                    request.paginationInput = pagination;



                    FindItemsByKeywordsResponse response = client.findItemsByKeywords(request);





                    foreach (var item in response.searchResult.item)

                    {

                        Console.WriteLine(item.viewItemURL.ToString());

                        tw.WriteLine(item.viewItemURL.ToString());

                    }

                }















            }



        }



        tw.Close();

        Console.WriteLine("end");

        Console.ReadKey();



    }



}



}

Solution

  • By default, the response returns the first page of data up to a maximum of 100 items. You can change this value with paginationInput.

    On the official eBay documentation for findItemsByKeywords, there is a section entitled Paginating the Results which tells you exactly what you need to know:

    Use paginationInput and its child elements to control which set of items matching the search criteria are returned in the result set. Use paginationInput to divide the returned items into subsets, or "pages," of data:

    paginationInput.entriesPerPage specifies the maximum number of items to return for any given request

    paginationInput.pageNumber specifies which "page" of data to return in the current call

    By default, the response returns the first page of data up to a maximum of 100 items. The following example shows how to return the second page of results, with each page containing a maximum of 50 items:

    ...&paginationInput.pageNumber=2&paginationInput.entriesPerPage=50...

    In this example, the response will contain the matching items 51 to 100, assuming there are at least 100 matching items.