/// <summary> /// Retrieve user timeline data with specific parser. /// </summary> /// <typeparam name="TSchema">Strong type for results.</typeparam> /// <param name="screenName">User screen name.</param> /// <param name="maxRecords">Upper record limit.</param> /// <param name="parser">Specific results parser.</param> /// <returns>Returns strongly typed list of results.</returns> public async Task <IEnumerable <TSchema> > GetUserTimeLineAsync <TSchema>(string screenName, int maxRecords, Toolkit.Parsers.IParser <TSchema> parser) where TSchema : Toolkit.Parsers.SchemaBase { string rawResult = null; try { var uri = new Uri($"{BaseUrl}/statuses/user_timeline.json?screen_name={OAuthEncoder.UrlEncode(screenName)}&count={maxRecords}"); WeiboOAuthRequest request = new WeiboOAuthRequest(); rawResult = await request.ExecuteGetAsync(uri, _tokens); var result = parser.Parse(rawResult); return(result .Take(maxRecords) .ToList()); } catch (UserNotFoundException) { throw new UserNotFoundException(screenName); } catch { if (!string.IsNullOrEmpty(rawResult)) { var errors = JsonConvert.DeserializeObject <WeiboError>(rawResult); throw new WeiboException { Error = errors }; } throw; } }
/// <summary> /// Get home time line data. /// </summary> /// <typeparam name="TSchema">Strong typed result.</typeparam> /// <param name="maxRecords">Upper record limit.</param> /// <param name="parser">Specific result parser.</param> /// <returns>Return strong typed list of results.</returns> private async Task <IEnumerable <TSchema> > GetHomeTimeLineAsync <TSchema>(int maxRecords, Toolkit.Parsers.IParser <TSchema> parser) where TSchema : Toolkit.Parsers.SchemaBase { var uri = new Uri($"{BaseUrl}/statuses/home_timeline.json?count={maxRecords}"); WeiboOAuthRequest request = new WeiboOAuthRequest(); var rawResult = await request.ExecuteGetAsync(uri, _tokens); return(parser.Parse(rawResult)); }
/// <summary> /// Retrieve user data. /// </summary> /// <param name="screenName">User screen name or null for current logged user</param> /// <returns>Returns user data.</returns> public async Task <WeiboUser> GetUserAsync(string screenName = null) { string rawResult = null; try { Uri uri; if (screenName == null) { uri = new Uri($"{BaseUrl}/users/show.json?uid={Uid}"); } else { uri = new Uri($"{BaseUrl}/users/show.json?screen_name={OAuthEncoder.UrlEncode(screenName)}"); } WeiboOAuthRequest request = new WeiboOAuthRequest(); rawResult = await request.ExecuteGetAsync(uri, _tokens); return(JsonConvert.DeserializeObject <WeiboUser>(rawResult)); } catch (UserNotFoundException) { throw new UserNotFoundException(screenName); } catch { if (!string.IsNullOrEmpty(rawResult)) { var error = JsonConvert.DeserializeObject <WeiboError>(rawResult); throw new WeiboException { Error = error }; } throw; } }
/// <summary> /// Posts a status update. /// </summary> /// <param name="status">Status text.</param> /// <param name="picture">Picture to attach to the status.</param> /// <returns>Success or failure.</returns> public async Task <WeiboStatus> PostStatusAsync(string status, Stream picture = null) { var uri = new Uri($"{BaseUrl}/statuses/share.json"); WeiboOAuthRequest request = new WeiboOAuthRequest(); if (picture == null) { return(await request.ExecutePostAsync(uri, _tokens, status)); } else { byte[] fileBytes; using (var ms = new MemoryStream()) { await picture.CopyToAsync(ms); fileBytes = ms.ToArray(); } return(await request.ExecutePostMultipartAsync(uri, _tokens, status, fileBytes)); } }