Exemplo n.º 1
0
        public static async Task <List <GqlResponse_Data_Subreddit_Layers_Edge> > SeekAll()
        {
            Console.WriteLine("[Data Seeker] Starting seek...");

            //Loop through until we get no results
            string after = null;
            List <GqlResponse_Data_Subreddit_Layers_Edge> output = new List <GqlResponse_Data_Subreddit_Layers_Edge>();

            while (true)
            {
                //Build a request
                GqlRequest request = new GqlRequest
                {
                    id        = "363cd3f2e49f",
                    variables = new GqlRequest_Vars
                    {
                        after       = after,
                        first       = 500,
                        subredditId = "t5_32b7p"
                    }
                };

                //Get data
                GqlResponse response;
                try
                {
                    response = await WebTools.PostJsonAsync <GqlResponse>("https://gql.reddit.com/", request);
                } catch (Exception ex)
                {
                    Console.WriteLine("FAILED. Going to output files now. " + ex.Message + ex.StackTrace);
                    break;
                }
                var edges = response.data.subreddit.layers.edges;
                Console.WriteLine($"[Data Seeker] Received {edges.Count} edges with range {response.data.subreddit.layers.pageInfo.startCursor}-{response.data.subreddit.layers.pageInfo.endCursor} with target begin {after}. Waiting 10 seconds...");
                if (edges.Count == 0)
                {
                    break;
                }
                after = response.data.subreddit.layers.pageInfo.endCursor;

                //Add to list
                output.AddRange(edges);

                //Wait to avoid Too Many Requests error
                Thread.Sleep(1000 * 10);
            }

            Console.WriteLine($"[Data Seeker] Found {output.Count} edges.");
            return(output);
        }
 /// <summary>
 /// Creates a request for GraphQL.
 /// </summary>
 /// <returns></returns>
 public static FluentHttpRequestBuilder CreateGqlRequest(this IFluentHttpClient fluentHttpClient, GqlRequest request)
 => fluentHttpClient.CreateRequest().AsGql(request);
 /// <summary>
 /// Set request as GraphQL.
 /// </summary>
 ///<returns>Returns request builder for chaining.</returns>
 public static FluentHttpRequestBuilder AsGql(this FluentHttpRequestBuilder builder, GqlRequest request) => builder.AsPost().WithBody(request);