Как прокомментировать и лайкнуть пост в Instagram с помощью С#

avatar
Ferid Š. Sejdović
8 апреля 2018 в 09:17
3889
2
1

У меня есть класс Instagram, определенный следующим образом (у меня есть этот код, и мне нужно реализовать некоторые новые вещи):

class Instagram
    {
        public HttpManager http = new HttpManager();

        public bool login(string username, string password)
        {
            string source = http.getResponse("https://www.instagram.com/accounts/login/?force_classic_login");

            var csrfmiddlewaretoken = http.ParseBetween(source, "\"csrfmiddlewaretoken\" value=\"", "\"");

            var values = new NameValueCollection();
            values.Add("username", username);
            values.Add("password", password);
            values.Add("csrfmiddlewaretoken", csrfmiddlewaretoken);

            http.Referer = "https://www.instagram.com/accounts/login/?force_classic_login";
            source = http.getResponse("https://www.instagram.com/accounts/login/?force_classic_login", values);

            return source.Contains("\"" + username + "\"");
        }

        public List<KeyValuePair<string, string> > getLatestImages(string tag)
        {
            string source = http.getResponse("https://www.instagram.com/explore/tags/" + tag + "/");

            var json = http.ParseBetween(source, "window._sharedData = ", ";</script>");

            dynamic obj = JObject.Parse(json);
            obj = obj.entry_data.TagPage[0].graphql.hashtag.edge_hashtag_to_media.edges;

            var returnList = new List<KeyValuePair<string, string>>();

            foreach (var post in obj)
            {
                string imageurl = post.node.thumbnail_resources[1].src; // post.node.display_url;
                string posturl = "https://www.instagram.com/p/" + post.node.shortcode;
                returnList.Add(new KeyValuePair<string, string>(imageurl, posturl));
            }

            return returnList;
        }
    }

Я получаю определенный набор сообщений с определенным хэштегом.

var insta = new Instagram();
insta.login("myusername", "mypassword");

Task.Run(() =>
{
    var res = insta.getLatestImages("myhashtag"); 

    foreach (var s in res)
    {
        Console.WriteLine(s.Key + " WITH myhashtag");
    }
});

Прежде чем задать свой вопрос (заголовок вопроса), я должен сказать, что я прочитал API Instagram и оболочку InstaSharp. Существует разница между этим решением (где мне нужно реализовать новые вещи, а не создавать их с нуля, следуя IAPI и IS) и примерами (IAPI и IS). Например... Используя InstaSharp, легко лайкнуть пост(но я не умею им пользоваться):

/// <summary>
        /// Set a like on this media by the currently authenticated user.
        /// <para>Requires Authentication: False</para>
        /// <para>
        /// <c>Required Scope: </c>likes
        /// </para>
        /// </summary>
        /// <param name="mediaId">The id of the media to create a like for.</param>
        /// <returns>LikesResponse</returns>
        public Task<LikesResponse> Post(string mediaId)
        {
            AssertIsAuthenticated();

            var request = Request("{id}/likes", HttpMethod.Post);
            request.AddUrlSegment("id", mediaId);
            return Client.ExecuteAsync<LikesResponse>(request);
        }

Я также обновляю файл класса (HttpManager). Любой ответ или подсказка более чем приветствуются. Наконец, еще раз, мне нужно сделать решение в соответствии с существующим кодом.

Источник

Ответы (2)

avatar
Ferid Š. Sejdović
29 августа 2018 в 10:15
-1

Я использовал InstaSharp с открытым исходным кодом.

avatar
DevELopE
29 августа 2018 в 07:27
4

Не нужно реализовывать эти опции самостоятельно. Для Instagram существует множество библиотек с открытым исходным кодом.

InstagramApiSharp — одна из тем.

Отправить комментарий медиа:

var commentResponse = await InstaApi.CommentProcessor.CommentMediaAsync("MEDIA ID", "Hey Keep it up!");

Нравится медиа:

var likeResponse = await InstaApi.MediaProcessor.LikeMediaAsync("MEDIA ID");