from hypothesis_settings import USERNAME, PASSWORD
import requests
import json
# do get to get 2 tokens CSFR
# https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
# http://list.hypothes.is/archive/dev/2013-10/0000096.html
# GET request /app and take the value of the beaker.session.id and XSRF-TOKEN Set-Cookie headers.
# Pass these both back in the POST request in the Cookie header.
# http://www.python-requests.org/en/v1.1.0/user/quickstart/#cookies
url = "https://hypothes.is/app"
r = requests.get(url)
cookies = r.cookies
payload = {"username":USERNAME,"password":PASSWORD}
data = json.dumps(payload)
headers = {'content-type':'application/json;charset=UTF-8'}
r = requests.post(url="https://hypothes.is/app?__formid__=login", data=data, cookies=cookies, headers=headers)
if r.json()['flash'].get('success') == ['You are now logged in.']:
token = r.json()['model']['token']
else:
token = None
# https://hypothes.is/a/ByQV3a_4R9KNq8VfatbxFQ -- public
# DtiypTBrTVSVAVmPNh7koQ -- private
url = "https://api.hypothes.is/annotations/{a_id}".format(a_id='DtiypTBrTVSVAVmPNh7koQ')
print url
headers = {"X-Annotator-Auth-Token": token}
r = requests.get(url, headers = headers)
annotation = r.json()
annotation
#annotation["id"], annotation["quote"], annotation["text"], annotation["uri"]
https://api.hypothes.is/annotations/DtiypTBrTVSVAVmPNh7koQ
{u'consumer': u'00000000-0000-0000-0000-000000000000', u'created': u'2013-10-24T22:04:01.711819+00:00', u'id': u'DtiypTBrTVSVAVmPNh7koQ', u'permissions': {u'admin': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is'], u'read': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is']}, u'quote': u'Shipmates', u'ranges': [{u'endContainer': u'/section[1]/p[6]', u'endOffset': 10, u'startContainer': u'/section[1]/p[6]', u'startOffset': 1}], u'reply_list': [], u'target': [{u'$$hashKey': u'012', u'quote': u'Shipmates', u'selector': [{u'endContainer': u'/section[1]/p[6]', u'endOffset': 10, u'startContainer': u'/section[1]/p[6]', u'startOffset': 1, u'type': u'RangeSelector'}, {u'exact': u'Shipmates', u'prefix': u'at fish to swallow up Jonah.\u2019\u201d \u201c', u'suffix': u', this book, containing only fou', u'type': u'TextQuoteSelector'}, {u'end': 1967, u'start': 1958, u'type': u'TextPositionSelector'}], u'source': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml'}], u'text': u'A highly resonant appellation for the congregation. ', u'updated': u'2013-10-24T22:04:01.711834+00:00', u'uri': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml', u'user': u'acct:rdhyee@hypothes.is'}
paging?
# NOT https://hypothes.is/stream#?user=rdhyee
# https://api.hypothes.is/search?user=acct:rdhyee@hypothes.is
from itertools import islice
from urllib import urlencode
def search(user, offset=0):
headers = {"X-Annotator-Auth-Token": token}
page_size = 10
user_acct = "acct:{user}@hypothes.is".format(user=user)
limit=page_size
more_results = True
while more_results:
search_dict = {'user':user_acct, 'limit':limit, 'offset':offset}
url = "https://api.hypothes.is/search?{query}".format(query=urlencode(search_dict))
r = requests.get(url, headers=headers)
rows = r.json().get("rows")
if len(rows):
for row in rows:
yield row
offset += page_size
else:
more_results = False
for (i,row) in enumerate(search(user='rdhyee', offset=0)):
print i, row
0 {u'updated': u'2013-10-26T17:50:57.031743+00:00', u'target': [{u'source': u'http://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/', u'quote': u'Vannevar Bush', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/div[5]/div[2]/div[1]/article[1]/div[6]/p[1]/i[1]', u'endOffset': 83, u'type': u'RangeSelector', u'startOffset': 70, u'startContainer': u'/div[5]/div[2]/div[1]/article[1]/div[6]/p[1]/i[1]'}, {u'exact': u'Vannevar Bush', u'prefix': u'c Research and Development, Dr.', u'type': u'TextQuoteSelector', u'suffix': u'has coordinated the activities'}, {u'start': 583, u'end': 596, u'type': u'TextPositionSelector'}]}], u'tags': [u'Wikipedia', u'Vannevar Bush', u'annotation'], u'quote': u'Vannevar Bush', u'created': u'2013-10-26T17:50:57.031726+00:00', u'uri': u'http://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/?single_page=true', u'ranges': [{u'endOffset': 83, u'endContainer': u'/div[5]/div[2]/div[1]/article[1]/div[6]/p[1]/i[1]', u'startOffset': 70, u'startContainer': u'/div[5]/div[2]/div[1]/article[1]/div[6]/p[1]/i[1]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'Who is Vannevar Bush? See [Wikipedia article on V. Bush(https://en.wikipedia.org/wiki/Vannevar_Bush)', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'63qvQu5jTvC4xig3adAsNQ', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 1 {u'updated': u'2013-10-26T16:44:15.135780+00:00', u'target': [{u'source': u'http://www.centerforbookarts.org/art/carrion.html', u'quote': u'spaces', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/table[2]/tbody[1]/tr[1]/td[3]/table[2]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/font[1]/font[1]', u'endOffset': 38, u'type': u'RangeSelector', u'startOffset': 32, u'startContainer': u'/table[2]/tbody[1]/tr[1]/td[3]/table[2]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/font[1]/font[1]'}, {u'exact': u'spaces', u'prefix': u'BOOK IS A book is a sequence of', u'type': u'TextQuoteSelector', u'suffix': u'. Each of these spaces is percei'}, {u'start': 92, u'end': 98, u'type': u'TextPositionSelector'}]}], u'tags': [u'BiB13'], u'quote': u'spaces', u'created': u'2013-10-26T16:44:15.135765+00:00', u'uri': u'http://www.centerforbookarts.org/art/carrion.html', u'ranges': [{u'endOffset': 38, u'endContainer': u'/table[2]/tbody[1]/tr[1]/td[3]/table[2]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/font[1]/font[1]', u'startOffset': 32, u'startContainer': u'/table[2]/tbody[1]/tr[1]/td[3]/table[2]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/font[1]/font[1]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'What does "spaces" mean here? Physical spaces? Mental spaces?', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'mdG3TKkTRd2qHAEzOTrOjw', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 2 {u'updated': u'2013-10-25T17:57:02.195838+00:00', u'$$hashKey': u'024', u'target': [], u'created': u'2013-10-25T17:57:02.195808+00:00', u'text': u'Who can be important players to put pressure on Germany and France to make their talks public?', u'uri': u'http://www.nytimes.com/2013/10/26/world/europe/fallout-over-american-spying-revelations.html?hp&_r=0', u'references': [u'eQGeHoI3SnGaIf2eMXj0bg'], u'user': u'acct:rdhyee@hypothes.is', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'I52Ohrz8QRifJu11BOBKPQ', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 3 {u'updated': u'2013-10-25T17:55:47.874879+00:00', u'target': [{u'source': u'http://www.nytimes.com/2013/10/26/world/europe/fallout-over-american-spying-revelations.html?pagewanted=all', u'quote': u'While Mr. Cameron said he supported Ms. Merkel and President Fran\xe7ois Hollande of France in seeking talks with Washington about new rules governing electronic surveillance, he delivered his strongest denunciation so far of those involved in publishing leaked material.', u'$$hashKey': u'012', u'selector': [{u'endContainer': u'/div[2]/div[3]/div[3]/div[1]/div[1]/div[1]/div[1]/div[5]/p[3]', u'endOffset': 269, u'type': u'RangeSelector', u'startOffset': 1, u'startContainer': u'/div[2]/div[3]/div[3]/div[1]/div[1]/div[1]/div[1]/div[5]/p[3]'}, {u'exact': u'While Mr. Cameron said he supported Ms. Merkel and President Fran\xe7ois Hollande of France in seeking talks with Washington about new rules governing electronic surveillance, he delivered his strongest denunciation so far of those involved in publishing leaked material.', u'prefix': u'nference in Brussels on Friday.', u'type': u'TextQuoteSelector', u'suffix': u'\u201cThat is not going to make our'}, {u'start': 2096, u'end': 2364, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-25T17:55:47.874864+00:00', u'quote': u'While Mr. Cameron said he supported Ms. Merkel and President Fran\xe7ois Hollande of France in seeking talks with Washington about new rules governing electronic surveillance, he delivered his strongest denunciation so far of those involved in publishing leaked material.', u'uri': u'http://www.nytimes.com/2013/10/26/world/europe/fallout-over-american-spying-revelations.html?hp', u'ranges': [{u'endOffset': 269, u'endContainer': u'/div[2]/div[3]/div[3]/div[1]/div[1]/div[1]/div[1]/div[5]/p[3]', u'startOffset': 1, u'startContainer': u'/div[2]/div[3]/div[3]/div[1]/div[1]/div[1]/div[1]/div[5]/p[3]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u"Cameron showing that the UK is still the USA's closest friend?", u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'hLy_OraDQoW9yHpEAoTonw', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 4 {u'updated': u'2013-10-24T22:04:01.711834+00:00', u'target': [{u'source': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml', u'quote': u'Shipmates', u'$$hashKey': u'012', u'selector': [{u'endContainer': u'/section[1]/p[6]', u'endOffset': 10, u'type': u'RangeSelector', u'startOffset': 1, u'startContainer': u'/section[1]/p[6]'}, {u'exact': u'Shipmates', u'prefix': u'at fish to swallow up Jonah.\u2019\u201d \u201c', u'type': u'TextQuoteSelector', u'suffix': u', this book, containing only fou'}, {u'start': 1958, u'end': 1967, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-24T22:04:01.711819+00:00', u'quote': u'Shipmates', u'uri': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml', u'ranges': [{u'endOffset': 10, u'endContainer': u'/section[1]/p[6]', u'startOffset': 1, u'startContainer': u'/section[1]/p[6]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'A highly resonant appellation for the congregation. ', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'DtiypTBrTVSVAVmPNh7koQ', u'permissions': {u'read': [u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 5 {u'updated': u'2013-10-22T22:44:50.673266+00:00', u'target': [{u'source': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml', u'quote': u'And God had prepared a great fish to swallow up Jonah.\u2019\u201d', u'$$hashKey': u'020', u'selector': [{u'endContainer': u'/section[1]/p[5]', u'endOffset': 362, u'type': u'RangeSelector', u'startOffset': 306, u'startContainer': u'/section[1]/p[5]'}, {u'exact': u'And God had prepared a great fish to swallow up Jonah.\u2019\u201d', u'prefix': u'of the first chapter of Jonah\u2014\u2018', u'type': u'TextQuoteSelector', u'suffix': u'\u201cShipmates, this book, containi'}, {u'start': 1900, u'end': 1956, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T22:44:50.673251+00:00', u'quote': u'And God had prepared a great fish to swallow up Jonah.\u2019\u201d', u'uri': u'http://epubjs-reader.appspot.com//moby-dick/OPS/chapter_009.xhtml', u'ranges': [{u'endOffset': 362, u'endContainer': u'/section[1]/p[5]', u'startOffset': 306, u'startContainer': u'/section[1]/p[5]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u"Check out Orson Welles' performance of this formidable sermon: http://www.youtube.com/watch?v=2rWV8sBZ9ho&feature=youtu.be&t=2m22s", u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'rghvgV_gQK6XfxqS0TgPxw', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 6 {u'updated': u'2013-10-22T21:54:11.385355+00:00', u'target': [{u'source': u'http://gutenberg.futurepress.org/s3/pg8294/8294/@public@vhost@g@gutenberg@html@files@8294@8294-h@8294-h-56.htm.html', u'quote': u"He entered and was passing through Jericho. 19:2 There was a man named Zacchaeus. He was a chief tax collector, and he was rich. 19:3 He was trying to see who Jesus was, and couldn't because of the crowd, because he was short.", u'$$hashKey': u'00X', u'selector': [{u'endContainer': u'/p[136]', u'endOffset': 231, u'type': u'RangeSelector', u'startOffset': 5, u'startContainer': u'/p[136]'}, {u'exact': u"He entered and was passing through Jericho. 19:2 There was a man named Zacchaeus. He was a chief tax collector, and he was rich. 19:3 He was trying to see who Jesus was, and couldn't because of the crowd, because he was short.", u'prefix': u'they saw it, praised God. 19:1', u'type': u'TextQuoteSelector', u'suffix': u'19:4 He ran on ahead, and climb'}, {u'start': 47537, u'end': 47763, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T21:54:11.385337+00:00', u'quote': u"He entered and was passing through Jericho. 19:2 There was a man named Zacchaeus. He was a chief tax collector, and he was rich. 19:3 He was trying to see who Jesus was, and couldn't because of the crowd, because he was short.", u'uri': u'http://gutenberg.futurepress.org/s3/pg8294/8294/@public@vhost@g@gutenberg@html@files@8294@8294-h@8294-h-56.htm.html', u'ranges': [{u'endOffset': 231, u'endContainer': u'/p[136]', u'startOffset': 5, u'startContainer': u'/p[136]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'Zacchaeus: a rich, short chief tax collector', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'YIONp2rhSrKNOKvSusrJqg', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 7 {u'updated': u'2013-10-22T15:58:24.725984+00:00', u'target': [{u'source': u'http://www.lectionarypage.net/YearC_RCL/Pentecost/CProp26_RCL.html', u'quote': u'Luke 19:1-10', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/h3[7]', u'endOffset': 13, u'type': u'RangeSelector', u'startOffset': 1, u'startContainer': u'/h3[7]'}, {u'exact': u'Luke 19:1-10', u'prefix': u'God and the Lord Jesus Christ.', u'type': u'TextQuoteSelector', u'suffix': u'Jesus entered Jericho and was p'}, {u'start': 5102, u'end': 5114, u'type': u'TextPositionSelector'}]}], u'tags': [u'lectionary'], u'quote': u'Luke 19:1-10', u'created': u'2013-10-22T15:58:24.725967+00:00', u'uri': u'http://www.lectionarypage.net/YearC_RCL/Pentecost/CProp26_RCL.html', u'ranges': [{u'endOffset': 13, u'endContainer': u'/h3[7]', u'startOffset': 1, u'startContainer': u'/h3[7]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u"Here's Luke 19:1-10 in lectionarypage.net", u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'jhaFSdt-Q7211hhlA2A87g', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 8 {u'updated': u'2013-10-22T15:57:37.427807+00:00', u'target': [{u'source': u'http://lectionary.library.vanderbilt.edu/texts.php?id=287', u'quote': u'Luke 19:1-10', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/div[1]/div[4]/div[2]/div[2]/span[6]', u'endOffset': 12, u'type': u'RangeSelector', u'startOffset': 0, u'startContainer': u'/div[1]/div[4]/div[2]/div[2]/span[6]'}, {u'exact': u'Luke 19:1-10', u'prefix': u'd Jesus Christ. [return to top]', u'type': u'TextQuoteSelector', u'suffix': u'19:1 He entered Jericho and was'}, {u'start': 5742, u'end': 5754, u'type': u'TextPositionSelector'}]}], u'tags': [u'lectionary'], u'quote': u'Luke 19:1-10', u'created': u'2013-10-22T15:57:37.427792+00:00', u'uri': u'http://lectionary.library.vanderbilt.edu/texts.php?id=287', u'ranges': [{u'endOffset': 12, u'endContainer': u'/div[1]/div[4]/div[2]/div[2]/span[6]', u'startOffset': 0, u'startContainer': u'/div[1]/div[4]/div[2]/div[2]/span[6]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'Reading of Luke 19:1-10 for Nov 3, 2013 in RCL', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'K9teEwdoQXCHTD2GHujfKA', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 9 {u'updated': u'2013-10-22T15:52:39.350469+00:00', u'target': [{u'source': u'http://ebible.org/web/LUK19.htm', u'quote': u'He has gone in to lodge with a man who is a sinner.\u201d', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/div[3]/div[2]', u'endOffset': 639, u'type': u'RangeSelector', u'startOffset': 587, u'startContainer': u'/div[3]/div[2]'}, {u'exact': u'He has gone in to lodge with a man who is a sinner.\u201d', u'prefix': u'it, they all murmured, saying, \u201c', u'type': u'TextQuoteSelector', u'suffix': u'8\xa0Zacchaeus stood and said to t'}, {u'start': 619, u'end': 671, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T15:52:39.350453+00:00', u'quote': u'He has gone in to lodge with a man who is a sinner.\u201d', u'uri': u'http://ebible.org/web/LUK19.htm#V0', u'ranges': [{u'endOffset': 639, u'endContainer': u'/div[3]/div[2]', u'startOffset': 587, u'startContainer': u'/div[3]/div[2]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'"to lodge" translated as "to be a guest of" in NRSV.', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'yohDy1xlTxGJSC9-I8JeRA', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 10 {u'updated': u'2013-10-22T15:45:23.907099+00:00', u'target': [{u'source': u'http://bible.oremus.org/?ql=171519823', u'selector': [{u'type': u'RangeSelector', u'startContainer': u'/div[3]/div[1]/p[2]', u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 72, u'endOffset': 81}, {u'type': u'TextQuoteSelector', u'prefix': u'ough it. 2A man was there named', u'exact': u'Zacchaeus', u'suffix': u'; he was a chief tax collector a'}, {u'start': 199, u'end': 208, u'type': u'TextPositionSelector'}], u'$$hashKey': u'05T', u'quote': u'Zacchaeus'}], u'created': u'2013-10-22T15:45:10.330343+00:00', u'quote': u'Zacchaeus', u'tags': [u'Wikipedia'], u'uri': u'http://bible.oremus.org/?ql=171519823', u'ranges': [{u'startContainer': u'/div[3]/div[1]/p[2]', u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 72, u'endOffset': 81}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'https://en.wikipedia.org/wiki/Zacchaeus', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'ByQV3a_4R9KNq8VfatbxFQ', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 11 {u'updated': u'2013-10-22T15:43:44.557588+00:00', u'target': [{u'source': u'http://bible.oremus.org/?ql=171519823', u'quote': u'Look, half of my possessions, Lord, I will give to the poor; and if I have defrauded anyone of anything, I will pay back four times as much.', u'$$hashKey': u'042', u'selector': [{u'endContainer': u'/div[3]/div[1]/p[2]', u'endOffset': 799, u'type': u'RangeSelector', u'startOffset': 659, u'startContainer': u'/div[3]/div[1]/p[2]'}, {u'exact': u'Look, half of my possessions, Lord, I will give to the poor; and if I have defrauded anyone of anything, I will pay back four times as much.', u'prefix': u'od there and said to the Lord, \u201c', u'type': u'TextQuoteSelector', u'suffix': u'\u201d 9Then Jesus said to him, \u201cToda'}, {u'start': 786, u'end': 926, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T15:43:44.557570+00:00', u'quote': u'Look, half of my possessions, Lord, I will give to the poor; and if I have defrauded anyone of anything, I will pay back four times as much.', u'uri': u'http://bible.oremus.org/?ql=171519823', u'ranges': [{u'endOffset': 799, u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 659, u'startContainer': u'/div[3]/div[1]/p[2]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'This offer of compensation seems super generous. What would be an expected level of compensation?', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'WRn7sB4BSYqZ0CTHRRdAXg', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 12 {u'updated': u'2013-10-22T15:40:54.634571+00:00', u'target': [{u'source': u'http://bible.oremus.org/?ql=171519823', u'quote': u'he was short in stature', u'$$hashKey': u'02J', u'selector': [{u'endContainer': u'/div[3]/div[1]/p[2]', u'endOffset': 236, u'type': u'RangeSelector', u'startOffset': 213, u'startContainer': u'/div[3]/div[1]/p[2]'}, {u'exact': u'he was short in stature', u'prefix': u'the crowd he could not, because', u'type': u'TextQuoteSelector', u'suffix': u'. 4So he ran ahead and climbed a'}, {u'start': 340, u'end': 363, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T15:40:54.634551+00:00', u'quote': u'he was short in stature', u'uri': u'http://bible.oremus.org/?ql=171519823', u'ranges': [{u'endOffset': 236, u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 213, u'startContainer': u'/div[3]/div[1]/p[2]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'As a short man myself, I identify with Zaccheus. The dude had to climb a tree to see Jesus!', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'uGU32fY5T12tS7uJRPGZvw', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 13 {u'updated': u'2013-10-22T15:39:36.125621+00:00', u'target': [{u'source': u'http://bible.oremus.org/?ql=171519823', u'quote': u'He has gone to be the guest', u'$$hashKey': u'01D', u'selector': [{u'endContainer': u'/div[3]/div[1]/p[2]', u'endOffset': 587, u'type': u'RangeSelector', u'startOffset': 560, u'startContainer': u'/div[3]/div[1]/p[2]'}, {u'exact': u'He has gone to be the guest', u'prefix': u'it began to grumble and said, \u201c', u'type': u'TextQuoteSelector', u'suffix': u'of one who is a sinner.\u201d 8Zacch'}, {u'start': 687, u'end': 714, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T15:39:36.125603+00:00', u'quote': u'He has gone to be the guest', u'uri': u'http://bible.oremus.org/?ql=171519823', u'ranges': [{u'endOffset': 587, u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 560, u'startContainer': u'/div[3]/div[1]/p[2]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'If you go to be a "guest" of a sinner, what does that make you? Also a sinner?', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'r5RuNrxlRceiCGi-pYxIJg', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}} 14 {u'updated': u'2013-10-22T15:38:34.132331+00:00', u'target': [{u'source': u'http://bible.oremus.org/?ql=171519823', u'quote': u'sinner', u'$$hashKey': u'00G', u'selector': [{u'endContainer': u'/div[3]/div[1]/p[2]', u'endOffset': 610, u'type': u'RangeSelector', u'startOffset': 604, u'startContainer': u'/div[3]/div[1]/p[2]'}, {u'exact': u'sinner', u'prefix': u'to be the guest of one who is a', u'type': u'TextQuoteSelector', u'suffix': u'.\u201d 8Zacchaeus stood there and sa'}, {u'start': 731, u'end': 737, u'type': u'TextPositionSelector'}]}], u'created': u'2013-10-22T15:38:34.132314+00:00', u'quote': u'sinner', u'uri': u'http://bible.oremus.org/?ql=171519823', u'ranges': [{u'endOffset': 610, u'endContainer': u'/div[3]/div[1]/p[2]', u'startOffset': 604, u'startContainer': u'/div[3]/div[1]/p[2]'}], u'user': u'acct:rdhyee@hypothes.is', u'text': u'Why was Zaccheus considered a sinner? (Because he was a tax collector, indeed, the chief tax collector)?', u'reply_list': [], u'consumer': u'00000000-0000-0000-0000-000000000000', u'id': u'vVoVbcHgRa6E4ETZ75BZ6w', u'permissions': {u'read': [u'group:__world__', u'acct:rdhyee@hypothes.is'], u'admin': [u'acct:rdhyee@hypothes.is'], u'update': [u'acct:rdhyee@hypothes.is'], u'delete': [u'acct:rdhyee@hypothes.is']}}