RatingsAndReviews
Differences between revisions 4 and 5
3027
Comment: Add example using auth'd api
|
4394
Update to demo submitting and filtering review on staging reviews server.
|
Deletions are marked like this. | Additions are marked like this. |
Line 37: | Line 37: |
The following example was run against the *staging* reviews server. |
|
Line 47: | Line 49: |
>>> oauth1_session_plaintext = requests_oauthlib.OAuth1Session(u1_creds['consumer_key'], ... client_secret=u1_creds['consumer_secret'], resource_owner_key=u1_creds['token'], ... resource_owner_secret=u1_creds['token_secret'], signature_method='PLAINTEXT') >>> eg_data = { ... 'arch_tag': 'i386', ... 'distroseries': 'ubuntu-sdk-13.10', ... 'language': 'en', ... 'origin': 'com.ubuntu.developer.dholbach.webapp-bvg', ... 'package_name': 'com.ubuntu.developer.dholbach.webapp-bvg', ... 'rating': '4', ... 'review_text': 'top stuff', ... 'summary': 'install it', ... 'version': '0.2' ... } |
|
Line 48: | Line 64: |
>>> eg_data = { 'app_name': 'snake', 'arch_tag': 'i386', 'distroseries': 'natty', 'language': 'en', 'origin': 'ubuntu', 'package_name': 'snake', 'rating': '4', 'review_text': 'good game', 'summary': 'good', 'version': '0.1'} |
# Creating a review works |
Line 60: | Line 66: |
>>> oauth1_session_plaintext = requests_oauthlib.OAuth1Session(u1_creds['consumer_key'], client_secret=u1_creds['consumer_secret'], resource_owner_key=u1_creds['token'], resource_owner_secret=u1_creds['token_secret'], signature_method='PLAINTEXT') |
>>> response = oauth1_session_plaintext.post("https://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/", data=json.dumps(eg_data), headers={'Content-Type': 'application/json'}) >>> response.reason 'OK' |
Line 64: | Line 70: |
>>> import json >>> response = oauth1_session_plaintext.post("https://reviews.ubuntu.com/reviews/api/1.0/reviews/", data=json.dumps(eg_data), headers={'Content-Type': 'application/json'}) >>> response.status_code 400 >>> print(response.text) {"errors": {"__all__": [": package snake not in ubuntu natty for natty"]}} |
# Creating a second review for the same package does not work >>> response = oauth1_session_plaintext.post("https://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/", data=json.dumps(eg_data), headers={'Content-Type': 'application/json'}) >>> response.reason 'BAD REQUEST' >>> response.text u'{"errors": {"__all__": ["A user cannot create multiple reviews for an app."]}}' # The filter of all reviews for the package now includes our review: >>> import requests >>> response = requests.get("http://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/filter/en/com.ubuntu.developer.dholbach.webapp-bvg/ubuntu-sdk-13.10/any/com.ubuntu.developer.dholbach.webapp-bvg/") >>> response.json() [{u'origin': u'com.ubuntu.developer.dholbach.webapp-bvg', u'rating': 4, u'hide': False, u'app_name': u'', u'language': u'en', u'usefulness_total': 0, u'usefulness_favorable': 0, u'reviewer_username': u'michael.nelson2', u'date_deleted': None, u'review_text': u'top stuff', u'package_name': u'com.ubuntu.developer.dholbach.webapp-bvg', u'distroseries': u'ubuntu-sdk-13.10', u'version': u'0.2', u'date_created': u'2014-01-08T13:00:07.735Z', u'reviewer_displayname': u'Michael Nelson', u'summary': u'install it', u'id': 1442}] |
Ratings & reviews
Contact: Michael Nelson (noodles)
After checking the code, the existing ratings and reviews client helper can do everything that we need[1][2]:
- Query for reviews of a specific packagename or packagename and version
- Submit new reviews
- Flag reviews as innapropriate etc.
- Add a +1 to a review (mark it as useful).
Example usage of public api
$ bzr branch lp:~rnr-developers/rnr-server/rnrclient $ cd rnrclient && virtualenv venv && venv/bin/python setup.py install && venv/bin/python >>> from rnrclient import RatingsAndReviewsAPI >>> api = RatingsAndReviewsAPI("http://reviews.ubuntu.com/reviews/api/1.0") >>> api.server_status() u'ok' >>> skype_reviews = api.get_reviews(packagename='skype') >>> len(skype_reviews) 10 >>> [review.version for review in skype_reviews] [u'4.2.0.11-0ubuntu0.12.04.1', u'4.2.0.11-0ubuntu0.12.04.1', u'4.1.0.20.0-0ubuntu0.13.04.2', u'4.1.0.20.0-0ubuntu0.13.04.2', u'4.1.0.20.0-0ubuntu0.13.04.2', u'4.1.0.20.0-0ubuntu0.12.04.2', u'4.1.0.20.0-0ubuntu0.12.04.2', u'4.1.0.20.0-0ubuntu0.12.04.2', u'4.1.0.20.0-0ubuntu0.12.04.2', u'4.1.0.20.0-0ubuntu0.12.04.2'] >>> skype_13_04_2_reviews = api.get_reviews(packagename='skype', version='4.1.0.20.0-0ubuntu0.13.04.2') >>> len(skype_13_04_2_reviews) 3 >>> api.get_reviews(packagename="com.example.myapp") []
Example usage of the authenticated API to submit a review, without rnr-client
The following example was run against the *staging* reviews server.
$ virtualenv testauth $ . testauth/bin/activate $ pip install requests requests_oauthlib $ python >>> import requests_oauthlib >>> import urlparse # Grab the u1 creds from Passwords and Keys app which USC should have created when you review via USC. >>> u1_creds = dict(urlparse.parse_qsl("consumer_secret=****&token=****&consumer_key=****&token_secret=****")) >>> oauth1_session_plaintext = requests_oauthlib.OAuth1Session(u1_creds['consumer_key'], ... client_secret=u1_creds['consumer_secret'], resource_owner_key=u1_creds['token'], ... resource_owner_secret=u1_creds['token_secret'], signature_method='PLAINTEXT') >>> eg_data = { ... 'arch_tag': 'i386', ... 'distroseries': 'ubuntu-sdk-13.10', ... 'language': 'en', ... 'origin': 'com.ubuntu.developer.dholbach.webapp-bvg', ... 'package_name': 'com.ubuntu.developer.dholbach.webapp-bvg', ... 'rating': '4', ... 'review_text': 'top stuff', ... 'summary': 'install it', ... 'version': '0.2' ... } # Creating a review works >>> response = oauth1_session_plaintext.post("https://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/", data=json.dumps(eg_data), headers={'Content-Type': 'application/json'}) >>> response.reason 'OK' # Creating a second review for the same package does not work >>> response = oauth1_session_plaintext.post("https://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/", data=json.dumps(eg_data), headers={'Content-Type': 'application/json'}) >>> response.reason 'BAD REQUEST' >>> response.text u'{"errors": {"__all__": ["A user cannot create multiple reviews for an app."]}}' # The filter of all reviews for the package now includes our review: >>> import requests >>> response = requests.get("http://reviews.staging.ubuntu.com/reviews/api/1.0/reviews/filter/en/com.ubuntu.developer.dholbach.webapp-bvg/ubuntu-sdk-13.10/any/com.ubuntu.developer.dholbach.webapp-bvg/") >>> response.json() [{u'origin': u'com.ubuntu.developer.dholbach.webapp-bvg', u'rating': 4, u'hide': False, u'app_name': u'', u'language': u'en', u'usefulness_total': 0, u'usefulness_favorable': 0, u'reviewer_username': u'michael.nelson2', u'date_deleted': None, u'review_text': u'top stuff', u'package_name': u'com.ubuntu.developer.dholbach.webapp-bvg', u'distroseries': u'ubuntu-sdk-13.10', u'version': u'0.2', u'date_created': u'2014-01-08T13:00:07.735Z', u'reviewer_displayname': u'Michael Nelson', u'summary': u'install it', u'id': 1442}]
[1] We may need to update the bulk delivery of stats so that the click package index can consume click-packages only. [2] The tests in the rnrclient module look unmaintained (2 failures), but the rnrclient is tested by the lp:rnr-server project (to ensure it’s always compatible).
AppStore/Interfaces/RatingsAndReviews (last edited 2015-04-22 20:40:02 by 180-172-246-190)