예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        /// <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);
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
        /// <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);
        }