コード例 #1
0
        public async Task <IResult <List <BoardItem> > > GetUserBoards(string Username = "")
        {
            if (Username == "")
            {
                Username = _user.UserName;
            }

            var builder = new UriBuilder("https://www.pinterest.com/" + PinApiConstants.RESOURCE_GET_BOARDS);

            builder.Port = -1;


            var query = HttpUtility.ParseQueryString(builder.Query);

            query["source_url"] = "";
            query["data"]       = "{\"options\":{\"username\":\"" + Username + "\",\"field_set_key\":\"detailed\"},\"context\":{}}";
            builder.Query       = query.ToString();
            string url = builder.ToString();


            var request = _httpHelper.GetDefaultRequest(HttpMethod.Get, new Uri(url));
            var cookies = _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client.BaseAddress);

            _httpHelper.AssginDefaultHeaders(ref request, cookies[PinApiConstants.CSRFTOKEN]?.Value);


            var response = await _httpRequestProcessor.GetAsync(new Uri(url));

            var json      = JObject.Parse(await response.Content.ReadAsStringAsync());
            var popupJson = json["resource_response"]["data"].ToString();

            return(Result.Success(JsonConvert.DeserializeObject <List <BoardItem> >(popupJson)));
        }
コード例 #2
0
        public static async Task <string> GetDefaultHtmlText(string url, IHttpRequestProcessor httpRequestProcessor)
        {
            var uri      = new Uri(url);
            var request  = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri);
            var response = await httpRequestProcessor.GetAsync(uri);

            var html = await response.Content.ReadAsStringAsync();

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(null);
            }

            return(html);
        }
コード例 #3
0
        public async Task <IResult <List <DocBusca> > > PesquisarArtistasAsync(string q, int limit = 10)
        {
            try
            {
                var url      = string.Format(VagalumeApiConstants.API_BUSCAR_ARTISTA_URL, q, limit);
                var uri      = new Uri(url);
                var request  = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri);
                var response = await _httpRequestProcessor.GetAsync(uri);

                var json = await response.Content.ReadAsStringAsync();

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <List <DocBusca> >(response, json));
                }

                var result = JsonConvert.DeserializeObject <BuscaDataWrapper>(json);
                return(Result.Success(result.Response.Docs));
            }
            catch (Exception ex)
            {
                return(Result.Fail <List <DocBusca> >(ex.Message));
            }
        }
コード例 #4
0
        public async Task <IResult <LetraMusica> > GetLetraMusica(string artista, string musica)
        {
            try
            {
                var url      = string.Format(VagalumeApiConstants.API_LETRA_MUSICA_URL, artista, musica);
                var uri      = new Uri(url);
                var request  = HttpHelper.GetDefaultRequest(HttpMethod.Get, uri);
                var response = await _httpRequestProcessor.GetAsync(uri);

                var json = await response.Content.ReadAsStringAsync();

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <LetraMusica>(response, json));
                }

                var result = JsonConvert.DeserializeObject <LetraMusica>(json);
                return(Result.Success(result));
            }
            catch (Exception ex)
            {
                return(Result.Fail <LetraMusica>(ex.Message));
            }
        }
コード例 #5
0
        /// <summary>
        ///     Login using given credentials asynchronously
        /// </summary>
        /// <returns>
        ///     Success --> is succeed
        ///     TwoFactorRequired --> requires 2FA login.
        ///     BadPassword --> Password is wrong
        ///     InvalidUser --> User/phone number is wrong
        ///     Exception --> Something wrong happened
        /// </returns>
        public async Task <IResult <InstaLoginResult> > LoginAsync()
        {
            ValidateUser();
            ValidateRequestMessage();
            try
            {
                var firstResponse = await _httpRequestProcessor.GetAsync(_httpRequestProcessor.Client.BaseAddress);

                var cookies =
                    _httpRequestProcessor.HttpHandler.CookieContainer.GetCookies(_httpRequestProcessor.Client
                                                                                 .BaseAddress);
                _logger?.LogResponse(firstResponse);
                var csrftoken = cookies[InstaApiConstants.CSRFTOKEN]?.Value ?? String.Empty;
                _user.CsrfToken = csrftoken;
                var instaUri  = UriCreator.GetLoginUri();
                var signature =
                    $"{_httpRequestProcessor.RequestMessage.GenerateSignature(InstaApiConstants.IG_SIGNATURE_KEY)}.{_httpRequestProcessor.RequestMessage.GetMessageString()}";
                var fields = new Dictionary <string, string>
                {
                    { InstaApiConstants.HEADER_IG_SIGNATURE, signature },
                    { InstaApiConstants.HEADER_IG_SIGNATURE_KEY_VERSION, InstaApiConstants.IG_SIGNATURE_KEY_VERSION }
                };
                var request = HttpHelper.GetDefaultRequest(HttpMethod.Post, instaUri, _deviceInfo);
                request.Content = new FormUrlEncodedContent(fields);
                request.Properties.Add(InstaApiConstants.HEADER_IG_SIGNATURE, signature);
                request.Properties.Add(InstaApiConstants.HEADER_IG_SIGNATURE_KEY_VERSION, InstaApiConstants.IG_SIGNATURE_KEY_VERSION);
                var response = await _httpRequestProcessor.SendAsync(request);

                var json = await response.Content.ReadAsStringAsync();

                if (response.StatusCode != HttpStatusCode.OK) //If the password is correct BUT 2-Factor Authentication is enabled, it will still get a 400 error (bad request)
                {
                    //Then check it
                    var loginFailReason = JsonConvert.DeserializeObject <InstaLoginBaseResponse>(json);

                    if (loginFailReason.InvalidCredentials)
                    {
                        return(Result.Fail("Invalid Credentials",
                                           loginFailReason.ErrorType == "bad_password"
                                ? InstaLoginResult.BadPassword
                                : InstaLoginResult.InvalidUser));
                    }
                    if (loginFailReason.TwoFactorRequired)
                    {
                        _twoFactorInfo = loginFailReason.TwoFactorLoginInfo;
                        //2FA is required!
                        return(Result.Fail("Two Factor Authentication is required", InstaLoginResult.TwoFactorRequired));
                    }

                    return(Result.UnExpectedResponse <InstaLoginResult>(response, json));
                }

                var loginInfo = JsonConvert.DeserializeObject <InstaLoginResponse>(json);
                IsUserAuthenticated = loginInfo.User?.UserName.ToLower() == _user.UserName.ToLower();
                var converter = ConvertersFabric.Instance.GetUserShortConverter(loginInfo.User);
                _user.LoggedInUder = converter.Convert();
                _user.RankToken    = $"{_user.LoggedInUder.Pk}_{_httpRequestProcessor.RequestMessage.phone_id}";
                return(Result.Success(InstaLoginResult.Success));
            }
            catch (Exception exception)
            {
                LogException(exception);
                return(Result.Fail(exception, InstaLoginResult.Exception));
            }
            finally
            {
                InvalidateProcessors();
            }
        }