Exemplo n.º 1
0
            private static string graphql_qurey(InstagramExtractorOption option, string query_hash, Dictionary <string, string> param)
            {
                var url = $"https://www.instagram.com/graphql/query/?query_hash=" + query_hash + "&variables=" +
                          HttpUtility.UrlEncode(JsonConvert.SerializeObject(param));

                option.PageReadCallback?.Invoke(url);
                return(NetTools.DownloadString(url));
            }
Exemplo n.º 2
0
            /// <summary>
            /// Get userid from user nickname
            /// </summary>
            /// <param name="html">https://www.instagram.com/(.*?)/</param>
            /// <returns></returns>
            public static User get_user(InstagramExtractorOption option, string html)
            {
                var json  = Regex.Match(html, @"window\._sharedData = (.*);</script>").Groups[1].Value;
                var juser = (JToken.Parse(json)["entry_data"]["ProfilePage"] as JArray)[0]["graphql"]["user"];

                var user = new User
                {
                    UserId          = juser["id"].ToString(),
                    UserName        = juser["username"].ToString(),
                    FullName        = juser["full_name"].ToString(),
                    TotalPostsCount = juser["edge_owner_to_timeline_media"]["count"].ToString().ToInt(),
                    FirstPost       = new Posts
                    {
                        HasNext     = (bool)juser["edge_owner_to_timeline_media"]["page_info"]["has_next_page"],
                        EndCursor   = juser["edge_owner_to_timeline_media"]["page_info"]["end_cursor"].ToString(),
                        DisplayUrls = new List <string>(),
                    }
                };

                option.ProgressMax?.Invoke(user.TotalPostsCount);

                option.ThumbnailCallback?.Invoke(NetTask.MakeDefault(juser["profile_pic_url_hd"].ToString()));

                foreach (var post in juser["edge_owner_to_timeline_media"]["edges"])
                {
                    user.FirstPost.PostCount++;
                    if (post["node"]["__typename"].ToString() == "GraphImage" || option.OnlyThumbnail)
                    {
                        user.FirstPost.DisplayUrls.Add(post["node"]["display_url"].ToString());
                    }
                    else
                    {
                        var short_code = post["node"]["shortcode"].ToString();
                        var json2      = graphql_qurey(option, sidecar_query_hash(), new Dictionary <string, string> {
                            { "shortcode", short_code }
                        });

                        if (post["node"]["__typename"].ToString() == "GraphVideo")
                        {
                            var media = JToken.Parse(json2)["data"]["shortcode_media"];
                            extract_url(media, option, user.FirstPost.DisplayUrls);
                        }
                        else
                        {
                            foreach (var media in JToken.Parse(json2)["data"]["shortcode_media"]["edge_sidecar_to_children"]["edges"])
                            {
                                extract_url(media["node"], option, user.FirstPost.DisplayUrls);
                            }
                        }
                    }
                }

                return(user);
            }
Exemplo n.º 3
0
 private static void extract_url(JToken media, InstagramExtractorOption option, List <string> urls)
 {
     if ((bool)media["is_video"] && !option.OnlyImages)
     {
         urls.Add(media["video_url"].ToString());
         if (option.IncludeThumbnail)
         {
             urls.Add(media["display_url"].ToString());
         }
     }
     else
     {
         urls.Add(media["display_url"].ToString());
     }
 }
Exemplo n.º 4
0
            public static Posts query_next(InstagramExtractorOption option, string query_hash, string id, string first, string after)
            {
RETRY:
                try
                {
                    var json = graphql_qurey(option, query_hash, new Dictionary <string, string> {
                        { "id", id }, { "first", first }, { "after", after }
                    });
                    var jmedia = JToken.Parse(json)["data"]["user"]["edge_owner_to_timeline_media"];

                    var posts = new Posts
                    {
                        HasNext     = (bool)jmedia["page_info"]["has_next_page"],
                        EndCursor   = jmedia["page_info"]["end_cursor"].ToString(),
                        DisplayUrls = new List <string>()
                    };

                    foreach (var post in jmedia["edges"])
                    {
                        posts.PostCount++;
                        if (post["node"]["__typename"].ToString() != "GraphSidecar" || option.OnlyThumbnail)
                        {
                            extract_url(post["node"], option, posts.DisplayUrls);
                        }
                        else
                        {
                            foreach (var media in post["node"]["edge_sidecar_to_children"]["edges"])
                            {
                                extract_url(media["node"], option, posts.DisplayUrls);
                            }
                        }
                    }

                    return(posts);
                }
                catch
                {
                    Thread.Sleep(2000);
                    goto RETRY;
                }
            }