{"action":"created","comment":{"url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/comments/94695260","pull_request_review_id":15228866,"id":94695260,"diff_hunk":"@@ -0,0 +1,168 @@\n+\n+# coding: utf-8\n+\n+# # Applying OCR to receipts\n+# \n+# As part of some analysis we might want to know the exact time when a receipt was issued and / or want to know the items that makes up for it in order to analyse its contents.\n+# \n+# For example, we can:\n+# \n+# * Match the timestamp of a receipt in a city far away from Brasilia when we believe the congress person was supposed to be in a session.\n+# * Match two timestamps of receipts made on the same day on cities really far from each other /\n+# * Look for things like alcoholic beverages.\n+# * See if the congressperson ordered too many dishes for \"himself\".\n+# * Check in and check out dates from hotels.\n+# \n+# Even though we have lots of libraries for doing OCR in Python, I believe [Google's Cloud Vision API](https://cloud.google.com/vision/) should be the \"State of the art\" when it comes to that type of thing since it is backed by Google, not to say that it is really easy to use. This notebook outlines the results of OCR'ing the receipts of the following 10 reimbursements picked from another analysis I did:\n+# \n+# * https://jarbas.datasciencebr.com/#/document_id/5631309 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/1789/2015/5631309.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5631380 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/1789/2015/5631380.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5928875 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/1564/2016/5928875.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5768932 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/80/2015/5768932.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5962849 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/3052/2016/5962849.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5962903 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/3052/2016/5962903.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5855221 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/2238/2015/5855221.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5856784 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/2238/2015/5856784.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/5921187 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/2871/2016/5921187.pdf\n+# * https://jarbas.datasciencebr.com/#/document_id/6069360 -> http://www.camara.gov.br/cota-parlamentar/documentos/publ/2935/2016/6069360.pdf\n+# \n+# **NOTE**: While this could have been done in Python, it would take me a while to get it going so I kept things as simple as possible with bash since this is just a spike.\n+\n+# # Setup\n+# \n+# Get an API key from Google Cloud that is able to access the [Vision API](https://cloud.google.com/vision/) and update the snippet below.\n+# \n+# **MAKE SURE YOU DON'T COMMIT IT TO VERSION CONTROL**\n+\n+# In[1]:\n+\n+get_ipython().run_cell_magic('bash', '', '\\nKEY=\"YOUR_KEY_HERE\"\\nKEY_PATH=\"/tmp/cloud-vision.key\"\\n\\nif ! [[ -f $KEY_PATH ]]; then\\n  echo \"${KEY}\" > $KEY_PATH\\n  echo \"Writing key to ${KEY_PATH}\"\\nelse\\n  echo \"Reusing existing key at ${KEY_PATH}\"\\nfi')\n+\n+\n+# You'll also need the `pdftoppm` command to convert PDFs to PNGs and `jq` to pretty print the JSON output returned by Google's API.\n+# \n+# On the Docker environment provided, you'll need to `docker exec -u root -ti CONTAINER bash` in order to have permissions to install the packages with a\n+# \n+# ```\n+# apt-get update && apt-get install -y poppler-utils jq\n+# ```\n+# \n+# ## Download receipts, convert to PNG and OCR them\n+\n+# In[2]:\n+\n+get_ipython().run_cell_magic('bash', '', '\\nocr() {\\n  id=\"${1}\"\\n  url=\"${2}\"\\n  mkdir -p \"/tmp/reimbursements/${id}\"\\n  cd \"/tmp/reimbursements/${id}\"\\n  echo \"---> $id\"\\n  echo \"     Downloading PDF from \\'$url\\'...\"\\n  curl -s \"${url}\" > \"document.pdf\"\\n  echo \"     Generating PNGs...\"\\n  pdftoppm -rx 300 -ry 300 -png \"document.pdf\" page\\n  \\n  for img in page*.png; do\\n    echo \"     OCRing ${img}...\"\\n    payload=\"payload-${img%.*}.json\"\\n    response=\"response-${img%.*}.json\"\\n    echo -n \\'{\"requests\": [ { \"features\": [ { \"type\": \"TEXT_DETECTION\" } ], \"image\": { \"content\": \"\\' > $payload\\n    base64 -w 0 $img >> $payload\\n    echo -n \\'\" } } ] }\\' >> $payload\\n    \\n    curl -s \"https://vision.clients6.google.com/v1/images:annotate?key=$(cat /tmp/cloud-vision.key)&alt=json\" \\\\\\n         --data-binary @$payload \\\\\\n         -H \\'Content-Type: application/json\\' \\\\\\n      > $response\\n  done\\n}\\n\\ndate\\nocr 5631309 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/1789/2015/5631309.pdf\\'\\nocr 5631380 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/1789/2015/5631380.pdf\\'\\nocr 5928875 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/1564/2016/5928875.pdf\\'\\nocr 5768932 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/80/2015/5768932.pdf\\'\\nocr 5962849 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/3052/2016/5962849.pdf\\'\\nocr 5962903 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/3052/2016/5962903.pdf\\'\\nocr 5855221 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/2238/2015/5855221.pdf\\'\\nocr 5856784 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/2238/2015/5856784.pdf\\'\\nocr 5921187 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/2871/2016/5921187.pdf\\'\\nocr 6069360 \\'http://www.camara.gov.br/cota-parlamentar/documentos/publ/2935/2016/6069360.pdf\\'\\ndate')\n+\n+\n+# As we can see, it takes a while to process just 10 PDFs on a 60Mb connection (5 minutes), if we ever move on with this we should really look into parallelizing it from day 0 and / or sending receipts in batches as it is supported by the API.\n+# \n+# ## Document [5631309](https://jarbas.datasciencebr.com/#/document_id/5631309)\n+# \n+# A hotel receipt with lots of text in it. There is a lot of stuff on those JSON responses so we just extract the info for the piece that represents the whole text.\n+\n+# In[3]:\n+\n+get_ipython().run_cell_magic('bash', '', \"jq -r '.responses[].textAnnotations[0].description' /tmp/reimbursements/5631309/response-page-1.json\\necho '--------------'; echo\\njq -r '.responses[].textAnnotations[0].description' /tmp/reimbursements/5631309/response-page-2.json\")","path":"develop/2016-12-30-fgrehm-ocr-receipts-with-google-cloud-vision.py","position":65,"original_position":65,"commit_id":"ea43d5a1966137125bfa72f569d50503f700b90b","original_commit_id":"ea43d5a1966137125bfa72f569d50503f700b90b","user":{"login":"fgrehm","id":81859,"avatar_url":"https://avatars.githubusercontent.com/u/81859?v=3","gravatar_id":"","url":"https://api.github.com/users/fgrehm","html_url":"https://github.com/fgrehm","followers_url":"https://api.github.com/users/fgrehm/followers","following_url":"https://api.github.com/users/fgrehm/following{/other_user}","gists_url":"https://api.github.com/users/fgrehm/gists{/gist_id}","starred_url":"https://api.github.com/users/fgrehm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgrehm/subscriptions","organizations_url":"https://api.github.com/users/fgrehm/orgs","repos_url":"https://api.github.com/users/fgrehm/repos","events_url":"https://api.github.com/users/fgrehm/events{/privacy}","received_events_url":"https://api.github.com/users/fgrehm/received_events","type":"User","site_admin":false},"body":"Nice! So I guess that the Cloud Vision API beats tesseract 💪 (at least without any additional tuning of course)","created_at":"2017-01-05T00:36:51Z","updated_at":"2017-01-05T00:36:52Z","html_url":"https://github.com/datasciencebr/serenata-de-amor/pull/173#discussion_r94695260","pull_request_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173","_links":{"self":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/comments/94695260"},"html":{"href":"https://github.com/datasciencebr/serenata-de-amor/pull/173#discussion_r94695260"},"pull_request":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173"}}},"pull_request":{"url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173","id":99761945,"html_url":"https://github.com/datasciencebr/serenata-de-amor/pull/173","diff_url":"https://github.com/datasciencebr/serenata-de-amor/pull/173.diff","patch_url":"https://github.com/datasciencebr/serenata-de-amor/pull/173.patch","issue_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/173","number":173,"state":"open","locked":false,"title":"Spike on OCR receipts with Google Cloud Vision API","user":{"login":"fgrehm","id":81859,"avatar_url":"https://avatars.githubusercontent.com/u/81859?v=3","gravatar_id":"","url":"https://api.github.com/users/fgrehm","html_url":"https://github.com/fgrehm","followers_url":"https://api.github.com/users/fgrehm/followers","following_url":"https://api.github.com/users/fgrehm/following{/other_user}","gists_url":"https://api.github.com/users/fgrehm/gists{/gist_id}","starred_url":"https://api.github.com/users/fgrehm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgrehm/subscriptions","organizations_url":"https://api.github.com/users/fgrehm/orgs","repos_url":"https://api.github.com/users/fgrehm/repos","events_url":"https://api.github.com/users/fgrehm/events{/privacy}","received_events_url":"https://api.github.com/users/fgrehm/received_events","type":"User","site_admin":false},"body":"As I mentioned over Telegram, I did a quick spike on using [Google's Cloud Vision API](https://cloud.google.com/vision/) to OCR a few receipts and this notebook showcases the results I found. I used different receipts this time and the results look a bit more promising.\r\n\r\nUnfortunately it would take me a while to get this right in Python so I just kept it simple and did with just bash. All the files related to it (pdf, payloads and responses) can be grabbed from the Zip below in case someone wants to play with it as well.\r\n\r\n[reimbursements-ocr.zip](https://github.com/datasciencebr/serenata-de-amor/files/678854/reimbursements-ocr.zip)\r\n","created_at":"2016-12-30T15:51:52Z","updated_at":"2017-01-05T00:36:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3f4e1edfcd72ec5691672cd3e70f3440e406294e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173/commits","review_comments_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173/comments","review_comment_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/173/comments","statuses_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/statuses/ea43d5a1966137125bfa72f569d50503f700b90b","head":{"label":"fgrehm:spike-on-ocr-receipts-with-google-cloud-vision","ref":"spike-on-ocr-receipts-with-google-cloud-vision","sha":"ea43d5a1966137125bfa72f569d50503f700b90b","user":{"login":"fgrehm","id":81859,"avatar_url":"https://avatars.githubusercontent.com/u/81859?v=3","gravatar_id":"","url":"https://api.github.com/users/fgrehm","html_url":"https://github.com/fgrehm","followers_url":"https://api.github.com/users/fgrehm/followers","following_url":"https://api.github.com/users/fgrehm/following{/other_user}","gists_url":"https://api.github.com/users/fgrehm/gists{/gist_id}","starred_url":"https://api.github.com/users/fgrehm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgrehm/subscriptions","organizations_url":"https://api.github.com/users/fgrehm/orgs","repos_url":"https://api.github.com/users/fgrehm/repos","events_url":"https://api.github.com/users/fgrehm/events{/privacy}","received_events_url":"https://api.github.com/users/fgrehm/received_events","type":"User","site_admin":false},"repo":{"id":75941417,"name":"serenata-de-amor","full_name":"fgrehm/serenata-de-amor","owner":{"login":"fgrehm","id":81859,"avatar_url":"https://avatars.githubusercontent.com/u/81859?v=3","gravatar_id":"","url":"https://api.github.com/users/fgrehm","html_url":"https://github.com/fgrehm","followers_url":"https://api.github.com/users/fgrehm/followers","following_url":"https://api.github.com/users/fgrehm/following{/other_user}","gists_url":"https://api.github.com/users/fgrehm/gists{/gist_id}","starred_url":"https://api.github.com/users/fgrehm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fgrehm/subscriptions","organizations_url":"https://api.github.com/users/fgrehm/orgs","repos_url":"https://api.github.com/users/fgrehm/repos","events_url":"https://api.github.com/users/fgrehm/events{/privacy}","received_events_url":"https://api.github.com/users/fgrehm/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fgrehm/serenata-de-amor","description":"🕵 Fighting corruption with data and SCIENCE!","fork":true,"url":"https://api.github.com/repos/fgrehm/serenata-de-amor","forks_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/forks","keys_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/teams","hooks_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/hooks","issue_events_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/issues/events{/number}","events_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/events","assignees_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/assignees{/user}","branches_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/branches{/branch}","tags_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/tags","blobs_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/git/refs{/sha}","trees_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/statuses/{sha}","languages_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/languages","stargazers_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/stargazers","contributors_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/contributors","subscribers_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/subscribers","subscription_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/subscription","commits_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/commits{/sha}","git_commits_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/git/commits{/sha}","comments_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/comments{/number}","issue_comment_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/issues/comments{/number}","contents_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/contents/{+path}","compare_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/merges","archive_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/downloads","issues_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/issues{/number}","pulls_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/pulls{/number}","milestones_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/milestones{/number}","notifications_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/labels{/name}","releases_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/releases{/id}","deployments_url":"https://api.github.com/repos/fgrehm/serenata-de-amor/deployments","created_at":"2016-12-08T13:45:05Z","updated_at":"2016-12-08T13:45:07Z","pushed_at":"2016-12-30T15:45:08Z","git_url":"git://github.com/fgrehm/serenata-de-amor.git","ssh_url":"git@github.com:fgrehm/serenata-de-amor.git","clone_url":"https://github.com/fgrehm/serenata-de-amor.git","svn_url":"https://github.com/fgrehm/serenata-de-amor","homepage":"http://serenata.datasciencebr.com/","size":27423,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"datasciencebr:master","ref":"master","sha":"a599fe339b4cd13a2b9c56e4f2521caa16f55973","user":{"login":"datasciencebr","id":20269426,"avatar_url":"https://avatars.githubusercontent.com/u/20269426?v=3","gravatar_id":"","url":"https://api.github.com/users/datasciencebr","html_url":"https://github.com/datasciencebr","followers_url":"https://api.github.com/users/datasciencebr/followers","following_url":"https://api.github.com/users/datasciencebr/following{/other_user}","gists_url":"https://api.github.com/users/datasciencebr/gists{/gist_id}","starred_url":"https://api.github.com/users/datasciencebr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/datasciencebr/subscriptions","organizations_url":"https://api.github.com/users/datasciencebr/orgs","repos_url":"https://api.github.com/users/datasciencebr/repos","events_url":"https://api.github.com/users/datasciencebr/events{/privacy}","received_events_url":"https://api.github.com/users/datasciencebr/received_events","type":"Organization","site_admin":false},"repo":{"id":62087567,"name":"serenata-de-amor","full_name":"datasciencebr/serenata-de-amor","owner":{"login":"datasciencebr","id":20269426,"avatar_url":"https://avatars.githubusercontent.com/u/20269426?v=3","gravatar_id":"","url":"https://api.github.com/users/datasciencebr","html_url":"https://github.com/datasciencebr","followers_url":"https://api.github.com/users/datasciencebr/followers","following_url":"https://api.github.com/users/datasciencebr/following{/other_user}","gists_url":"https://api.github.com/users/datasciencebr/gists{/gist_id}","starred_url":"https://api.github.com/users/datasciencebr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/datasciencebr/subscriptions","organizations_url":"https://api.github.com/users/datasciencebr/orgs","repos_url":"https://api.github.com/users/datasciencebr/repos","events_url":"https://api.github.com/users/datasciencebr/events{/privacy}","received_events_url":"https://api.github.com/users/datasciencebr/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/datasciencebr/serenata-de-amor","description":"🕵 Fighting corruption with data and SCIENCE!","fork":false,"url":"https://api.github.com/repos/datasciencebr/serenata-de-amor","forks_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/forks","keys_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/teams","hooks_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/hooks","issue_events_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/events{/number}","events_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/events","assignees_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/assignees{/user}","branches_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/branches{/branch}","tags_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/tags","blobs_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/git/refs{/sha}","trees_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/statuses/{sha}","languages_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/languages","stargazers_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/stargazers","contributors_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/contributors","subscribers_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/subscribers","subscription_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/subscription","commits_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/commits{/sha}","git_commits_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/git/commits{/sha}","comments_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/comments{/number}","issue_comment_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/comments{/number}","contents_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/contents/{+path}","compare_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/merges","archive_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/downloads","issues_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues{/number}","pulls_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls{/number}","milestones_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/milestones{/number}","notifications_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/labels{/name}","releases_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/releases{/id}","deployments_url":"https://api.github.com/repos/datasciencebr/serenata-de-amor/deployments","created_at":"2016-06-27T20:55:11Z","updated_at":"2017-01-04T13:47:36Z","pushed_at":"2017-01-04T16:33:48Z","git_url":"git://github.com/datasciencebr/serenata-de-amor.git","ssh_url":"git@github.com:datasciencebr/serenata-de-amor.git","clone_url":"https://github.com/datasciencebr/serenata-de-amor.git","svn_url":"https://github.com/datasciencebr/serenata-de-amor","homepage":"http://serenata.datasciencebr.com/","size":27041,"stargazers_count":1465,"watchers_count":1465,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":276,"mirror_url":null,"open_issues_count":52,"forks":276,"open_issues":52,"watchers":1465,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173"},"html":{"href":"https://github.com/datasciencebr/serenata-de-amor/pull/173"},"issue":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/173"},"comments":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/issues/173/comments"},"review_comments":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173/comments"},"review_comment":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/pulls/173/commits"},"statuses":{"href":"https://api.github.com/repos/datasciencebr/serenata-de-amor/statuses/ea43d5a1966137125bfa72f569d50503f700b90b"}}}}
{"actor":{"display_login":"fgrehm"}}