/// <summary> /// Returns a goodreads User object for the given Id. If no ID is passed /// used logged in user instead. /// </summary> /// <param name="userID">goodreads user ID</param> /// <returns>User</returns> public async Task <User> GetUserInfo(string userID = null) { if (String.IsNullOrEmpty(userID)) { //we want the logged in user if (IsUserIdAvailable) { userID = MyShelfSettings.Instance.GoodreadsUserID; } else { } } else { //we want someone else } //TODO bail out if someone messed this up :P string results = await ApiClient.Instance.HttpGet(String.Format(Urls.UserShow, userID, MyShelfSettings.Instance.ConsumerKey), CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(1)); var result = GoodReadsSerializer.DeserializeResponse(results); return(result.User); }
/// <summary> /// Returns an author's books /// </summary> /// <param name="id"></param> /// <param name="page"></param> /// <returns></returns> public async Task <Books> GetAuthorBooks(string id /*, int page = 1*/) { string results = await ApiClient.Instance.HttpGet(String.Format(Urls.AuthorBooks, id, MyShelfSettings.Instance.ConsumerKey), CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(15)); /*, page.ToString()*/ var result = GoodReadsSerializer.DeserializeResponse(results); return(result.Author.Books); }
/// <summary> /// Returns more complete author data /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <Author> GetAuthorInfo(string id) { string results = await ApiClient.Instance.HttpGet(String.Format(Urls.AuthorShow, id, MyShelfSettings.Instance.ConsumerKey), CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(30)); var result = GoodReadsSerializer.DeserializeResponse(results); return(result.Author); }
/// <summary> /// Returns a user's friends /// </summary> /// <param name="page"></param> /// <param name="sort"></param> /// <returns></returns> public async Task <Friends> GetFriends(string page = null, string sort = null) { var response = await ApiClient.Instance.ExecuteForProtectedResourceAsync(string.Format(Urls.FriendList, MyShelfSettings.Instance.GoodreadsUserID), Method.GET, MyShelfSettings.Instance.ConsumerKey, MyShelfSettings.Instance.ConsumerSecret, MyShelfSettings.Instance.OAuthAccessToken, MyShelfSettings.Instance.OAuthAccessTokenSecret, null, CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(1)); GoodreadsResponse result = GoodReadsSerializer.DeserializeResponse(response.Content); return(result.Friends); }
/// <summary> /// Returns the friend update feed for the logged in user /// </summary> /// <param name="type"></param> /// <param name="filter"></param> /// <param name="maxUpdates"></param> public async Task <Updates> GetFriendUpdates(string type, string filter, string maxUpdates) { var response = await ApiClient.Instance.ExecuteForProtectedResourceAsync(Urls.FriendUpdates, Method.GET, MyShelfSettings.Instance.ConsumerKey, MyShelfSettings.Instance.ConsumerSecret, MyShelfSettings.Instance.OAuthAccessToken, MyShelfSettings.Instance.OAuthAccessTokenSecret, null, CacheMode.UpdateAsyncIfExpired, TimeSpan.FromMinutes(10)); GoodreadsResponse result = GoodReadsSerializer.DeserializeResponse(response.Content); return(result.Updates); }
/// <summary> /// Performs a GoodReads search for the given query /// </summary> /// <param name="query">string to search for</param> /// <returns>List of Work items</returns> public async Task <Search> Search(string query) { if (string.IsNullOrEmpty(query)) { return(null); } string results = await ApiClient.Instance.HttpGet(String.Format(Urls.Search, MyShelfSettings.Instance.ConsumerKey, query.Replace(" ", "+"))); var result = GoodReadsSerializer.DeserializeResponse(results); return(result.Search); }
public async Task <Review> GetUserReview(string bookId, string userId = null) { if (string.IsNullOrEmpty(userId)) { userId = MyShelfSettings.Instance.GoodreadsUserID; } string results = await ApiClient.Instance.HttpGet(String.Format(Urls.UserReview, bookId, MyShelfSettings.Instance.ConsumerKey, userId), CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(30)); var result = GoodReadsSerializer.DeserializeResponse(results); return(result.Review); }
/// <summary> /// Returns the shelves for the logged in user /// </summary> /// <param name="query">string to search for</param> /// <returns>List of Work items</returns> public async Task <List <UserShelf> > GetShelvesList() { string response = string.Empty; await shelfSemaphore.WaitAsync(); try { response = await ApiClient.Instance.HttpGet(String.Format(Urls.ShelvesList, MyShelfSettings.Instance.ConsumerKey), CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(7)); } finally { shelfSemaphore.Release(); } var result = GoodReadsSerializer.DeserializeResponse(response); return(result.Shelves.UserShelf); }
/// <summary> /// Returns the logged in User /// </summary> /// <returns>User</returns> public async Task <User> GetUserID(bool refresh = false) { if (_currentUser == null || refresh) { var response = await ApiClient.Instance.ExecuteForProtectedResourceAsync(Urls.AuthUser, Method.GET, MyShelfSettings.Instance.ConsumerKey, MyShelfSettings.Instance.ConsumerSecret, MyShelfSettings.Instance.OAuthAccessToken, MyShelfSettings.Instance.OAuthAccessTokenSecret, null, CacheMode.UpdateAsyncIfExpired, TimeSpan.FromDays(30)); var result = GoodReadsSerializer.DeserializeResponse(response.Content.ToString()); _currentUser = result.User; MyShelfSettings.Instance.GoodreadsUserID = result.User.Id; MyShelfSettings.Instance.GoodreadsUsername = result.User.UserName; MyShelfSettings.Instance.GoodreadsUserLink = result.User.Link; } return(_currentUser); }
/// <summary> /// Returns the books for the logged in user /// </summary> /// <param name="type"></param> /// <param name="filter"></param> /// <param name="maxUpdates"></param> public async Task <Reviews> GetBooks(string shelf = null, string sort = null, string query = null, string order = null, string page = null, string per_page = "200") { string url = Urls.ShelfBooks + MyShelfSettings.Instance.GoodreadsUserID + ".xml?key=" + MyShelfSettings.Instance.ConsumerKey + "&format=xml&v=2"; if (!String.IsNullOrEmpty(shelf)) { url += "&shelf=" + shelf; } if (!String.IsNullOrEmpty(per_page)) { url += "&per_page=" + per_page; } var response = await ApiClient.Instance.ExecuteForProtectedResourceAsync(url, RestSharp.Method.GET, MyShelfSettings.Instance.ConsumerKey, MyShelfSettings.Instance.ConsumerSecret, MyShelfSettings.Instance.OAuthAccessToken, MyShelfSettings.Instance.OAuthAccessTokenSecret, null, CacheMode.UpdateAsyncIfExpired, TimeSpan.FromHours(6) ); //if (shelf == null && justRefreshedReviews) //{ // Task.Run(async () => // { // client.Authenticator = OAuth1Authenticator.ForProtectedResource(API_KEY, OAUTH_SECRET, UserSettings.Settings.OAuthAccessToken, UserSettings.Settings.OAuthAccessTokenSecret); // string url = "review/list/" + UserSettings.Settings.GoodreadsUserID + ".xml?key=" + API_KEY + "&format=xml&v=2"; // //TODO: more params, probably enums // if (!String.IsNullOrEmpty(shelf)) // url += "&shelf=" + shelf; // if (!String.IsNullOrEmpty(per_page)) // url += "&per_page=" + per_page; // await apiSemaphore.WaitAsync(); // var request = new RestRequest(url, Method.GET); // var response = await client.ExecuteAsync(request); // ApiCooldown(); // var result = DeserializeResponse(response.Content.ToString()); // GoodreadsReviews = result.Reviews; // }); //} //else //{ //client.Authenticator = OAuth1Authenticator.ForProtectedResource(API_KEY, OAUTH_SECRET, UserSettings.Settings.OAuthAccessToken, UserSettings.Settings.OAuthAccessTokenSecret); //string url = Urls.ShelfBooks + MyShelfSettings.Instance.GoodreadsUserID + ".xml?key=" + MyShelfSettings.Instance.ConsumerKey + "&format=xml&v=2"; //TODO: more params, probably enums //if (!String.IsNullOrEmpty(shelf)) // url += "&shelf=" + shelf; //if (!String.IsNullOrEmpty(per_page)) // url += "&per_page=" + per_page; //var response = await ApiClient.Instance.ExecuteForProtectedResourceAsync(url, RestSharp.Method.GET, MyShelfSettings.Instance.ConsumerKey, MyShelfSettings.Instance.ConsumerSecret, MyShelfSettings.Instance.OAuthAccessToken, MyShelfSettings.Instance.OAuthAccessTokenSecret); //await apiSemaphore.WaitAsync(); //var request = new RestRequest(url, Method.GET); //var response = await client.ExecuteAsync(request); //ApiCooldown(); var result = GoodReadsSerializer.DeserializeResponse(response.Content); //GoodreadsReviews = result.Reviews; //} return(result.Reviews); }