{"action":"created","comment":{"url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/comments/80606885","pull_request_review_id":1652730,"id":80606885,"diff_hunk":"@@ -0,0 +1,267 @@\n+import requests\n+import csv\n+import sys\n+import glob\n+\n+class AutoComplete():\n+    def __init__(self, key):\n+        self.GOOGLE_API_KEYS = key\n+        self.key_index=0\n+        self.key = self.GOOGLE_API_KEYS[key_index]\n+        self.chain_failure = False      # TO DISTINGUISH BETWEEN CONCURRENT CALL FAILURE and QUERY-OVERLIMIT FAILURE\n+\n+        self.autocomplete_flag = ['FIXED', 'MULTIPLE MATCHED', 'NONE MATCHED', 'NO INPUT DATA', 'NO PREDICTION']\n+        # FOR STATE DATA TO BE USED BY AUTOCOMPLETE\n+        self.state_data_rows = []\n+        file_name = glob.glob('./state_data/city_state.csv')\n+        state_file = open(file_name[0],'r')\n+        state_reader = csv.DictReader(state_file, dialect=csv.excel)\n+        self.state_data_rows.extend(state_reader)\n+        state_file.close()\n+\n+        self.rows = []\n+        # GLOBAL JSON DICTIONARY TO BE USED BY ALL FUNCTION RATHER THAN MAKING  DIRECT API CALLS\n+        self.json_objects = dict()\n+\n+    def get_state(self,city):\n+        state = ''\n+        found = False\n+\n+        for row in self.state_data_rows:\n+            if row['Name of City'].strip().lower() == city.strip().lower():\n+                state = row['State']\n+                found = True\n+                break\n+        if not found:\n+            print 'NO STATE MATCH FOR CITY'\n+            sys.exit()\n+        else:\n+            return state\n+\n+    def graceful_request(self,url):\n+        while True:\n+            resp = requests.get(url+self.GOOGLE_API_KEYS[self.key_index]).json()\n+            if resp['status'] == 'OK':\n+                break\n+            if resp['status'] == 'ZERO_RESULTS':\n+                break\n+            print 'ERROR - RESENDING REQUEST'\n+\n+            # TO DISTINGUISH BETWEEN SINGLE AND MULTIPLE FAILURES\n+            if self.chain_failure:\n+                print 'CHANGING KEYS'\n+                self.key_index = (self.key_index+1)%len(self.GOOGLE_API_KEYS)\n+                self.chain_failure = False\n+            else:\n+                self.chain_failure = True\n+\n+        self.chain_failure = False\n+        return resp\n+\n+    # REQUIRES COUNTRY CODE TO START WITH +, IF PRESENT\n+    def parser(self, x):\n+        flag_add = False\n+        numerals = ['0','1','2','3','4','5','6','7','8','9']\n+        allowed_start_symbols = numerals + ['+']\n+\n+        ############\n+        #INITIAL CLEANUP\n+        x = x.strip()\n+        idx=0\n+        for _ in x:\n+            if _ in allowed_start_symbols:\n+                break\n+            idx += 1\n+        x = x[idx:]\n+        #############\n+\n+        if x.find('+91') == 0:\n+            flag_add = True\n+\n+        word = ''\n+        phone_number = []\n+\n+        if flag_add:\n+            word = list(x[3:])\n+        else:\n+            word = list(x)\n+\n+        non_zero_encountered = False\n+        for letter in word:\n+            # REMOVES 0 FROM START OF NUMBERS\n+            if not non_zero_encountered:\n+                if letter in numerals[1:]:\n+                    non_zero_encountered = True\n+\n+            if non_zero_encountered:\n+                if letter in numerals:\n+                    phone_number.append(letter)\n+        return ''.join(phone_number)\n+\n+    def no_prediction_cases(self, row, address):\n+        extract = lambda x:'' if x is None else x\n+        phones = []\n+        if row['Phone1'] != '' and row['Phone1'] is not None:\n+            phones.append(row['Phone1'])\n+        if row['Phone2'] != '' and row['Phone2'] is not None:\n+            phones.append(row['Phone2'])\n+        if row['Phone3'] != '' and row['Phone3'] is not None:\n+            phones.append(row['Phone3'])\n+        if row['Phone4'] != '' and row['Phone4'] is not None:\n+            phones.append(row['Phone4'])\n+        if row['Phone5'] != '' and row['Phone5'] is not None:\n+            phones.append(row['Phone5'])\n+\n+        url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input='+address+'&types=establishment&location=0,0&radius=20000000&components=country:IN&key='\n+        resp = self.graceful_request(url)\n+        if len(resp[\"predictions\"]) == 1:\n+            print '\\t-->','  ',resp[\"predictions\"][0][\"description\"]\n+            return True, resp[\"predictions\"][0]['place_id']\n+\n+        elif len(resp[\"predictions\"]) > 1:\n+            print '\\tMATCHING PHONE NUMBERS'\n+            print '\\t|| ORIGINAL : ',phones\n+            for x in resp[\"predictions\"]:\n+                place_id = x['place_id']\n+                url='https://maps.googleapis.com/maps/api/place/details/json?placeid='+place_id+'&key='\n+                resp_x = self.graceful_request(url).get('result')\n+                # THIS GUARANTEES THE COUNTRY CODE TO START WITH +\n+                international_number = self.parser(extract(resp_x.get('international_phone_number')))\n+                print '\\t||   > NEW : ',international_number\n+                for phone in phones:\n+                    if self.parser(phone) == international_number:\n+                        print '\\t|| PHONE NUMBERS MATCHED'\n+                        print '\\t-->','  ',x[\"description\"]\n+                        return True, place_id\n+\n+            print '\\t|| NO PHONE MATCHED'\n+            return False,''\n+        else:\n+            return False,''\n+\n+    def update_json_object(self, place_id):\n+        url='https://maps.googleapis.com/maps/api/place/details/json?placeid='+place_id+'&key='\n+        resp_x = self.graceful_request(url).get('result')\n+        self.json_objects[place_id]=resp_x\n+\n+    def main(self, rows_data):\n+        self.rows = rows_data\n+\n+        self._autoComplete()\n+        self._updateAddress()\n+\n+\n+        # Dictionary self.json_objects is large\n+        # This should be released before the next file is opened as the current object won't go out of scope.\n+        # So _releaseMemory() should be the last function to run. Place other functions before this.\n+        self._releaseMemory()\n+\n+    def _autoComplete(self):\n+        fixed_count = 0\n+        multiple_matched_count = 0\n+        none_matched_count = 0\n+        no_prediction_count = 0\n+        no_data_count = 0\n+\n+        print '\\nRUNNING AUTOCOMPLETE'\n+        state = self.get_state(self.rows[0]['City'])\n+        print 'STATE : ',state\n+        row_idx=2\n+\n+        for row in self.rows:\n+            valid = True\n+            address = ''\n+\n+            if (row['Locality'] == ''):\n+                valid = False\n+                no_data_count += 1\n+                print row_idx,'\\t',self.autocomplete_flag[3]\n+            else:\n+                address = row['Name'] + ', ' + row['Locality']\n+\n+            if valid:\n+                url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input='+address+'&types=establishment&location=0,0&radius=20000000&components=country:IN&key='\n+                resp = self.graceful_request(url)\n+\n+                correct_prediction = ''\n+                if len(resp[\"predictions\"]) > 0:\n+                    print row_idx,\n+                    found = False\n+                    multiple_match = False\n+                    for x in resp[\"predictions\"]:\n+                        print '\\t-->','  ',x[\"description\"]\n+                        for term in x[\"terms\"]:\n+                            if term['value'].strip().lower() == state.strip().lower():\n+                                if not found:\n+                                    correct_prediction = x\n+                                    found = True\n+                                else:\n+                                    multiple_match = True\n+\n+                    print '\\tRES: ',\n+                    if multiple_match == True:\n+                        address = row['Name'] + ', ' + row['Locality'] + row['City']\n+                        url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input='+address+'&types=establishment&location=0,0&radius=20000000&components=country:IN&key='\n+                        resp = self.graceful_request(url)\n+\n+                        if len(resp[\"predictions\"]) == 1:\n+                            correct_prediction = resp[\"predictions\"][0]\n+                            multiple_match = False\n+\n+                    if found and not multiple_match:\n+                        fixed_count += 1\n+                        print self.autocomplete_flag[0]\n+                        place_id = correct_prediction['place_id']\n+                        row['place_id'] = place_id\n+                        self.update_json_object(place_id)\n+\n+                    elif multiple_match:\n+                        multiple_matched_count += 1\n+                        print self.autocomplete_flag[1]\n+\n+                    else:\n+                        none_matched_count += 1\n+                        print self.autocomplete_flag[2]","path":"autoComplete.py","position":224,"original_position":224,"commit_id":"09a13781c29d1dbdec83a1bfa34dcfc074df1a29","original_commit_id":"09a13781c29d1dbdec83a1bfa34dcfc074df1a29","user":{"login":"rohitmanglik","id":677634,"avatar_url":"https://avatars.githubusercontent.com/u/677634?v=3","gravatar_id":"","url":"https://api.github.com/users/rohitmanglik","html_url":"https://github.com/rohitmanglik","followers_url":"https://api.github.com/users/rohitmanglik/followers","following_url":"https://api.github.com/users/rohitmanglik/following{/other_user}","gists_url":"https://api.github.com/users/rohitmanglik/gists{/gist_id}","starred_url":"https://api.github.com/users/rohitmanglik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohitmanglik/subscriptions","organizations_url":"https://api.github.com/users/rohitmanglik/orgs","repos_url":"https://api.github.com/users/rohitmanglik/repos","events_url":"https://api.github.com/users/rohitmanglik/events{/privacy}","received_events_url":"https://api.github.com/users/rohitmanglik/received_events","type":"User","site_admin":false},"body":"If nothing is found, why don't we check through city or pincode as you did below.\r\n\r\nBest way would be to wrap below code in a function and call it.\r\n\r\n`\r\n +                    address = row['Name'] + ', ' + row['Pincode']\r\n +                    flag, place_id =  self.no_prediction_cases(row,address)\r\n +                    if flag == False:\r\n +                        address = row['Name'] + ', ' + row['City']\r\n +                        flag, place_id =  self.no_prediction_cases(row,address)\r\n +\r\n +                    if flag == False:\r\n +                        no_prediction_count += 1\r\n +                        print '\\t',self.autocomplete_flag[4]\r\n +                    else:\r\n +                        print '\\tRES: ',\r\n +                        fixed_count += 1\r\n +                        print self.autocomplete_flag[0]\r\n +                        row['place_id'] = place_id\r\n +                        self.update_json_object(place_id)`","created_at":"2016-09-27T01:27:55Z","updated_at":"2016-09-27T01:30:30Z","html_url":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43#discussion_r80606885","pull_request_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43","_links":{"self":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/comments/80606885"},"html":{"href":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43#discussion_r80606885"},"pull_request":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43"}}},"pull_request":{"url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43","id":86845845,"html_url":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43","diff_url":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43.diff","patch_url":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43.patch","issue_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/43","number":43,"state":"closed","locked":false,"title":"Autocomplete Enhanced and Other Changes","user":{"login":"shashwat-vik","id":17675065,"avatar_url":"https://avatars.githubusercontent.com/u/17675065?v=3","gravatar_id":"","url":"https://api.github.com/users/shashwat-vik","html_url":"https://github.com/shashwat-vik","followers_url":"https://api.github.com/users/shashwat-vik/followers","following_url":"https://api.github.com/users/shashwat-vik/following{/other_user}","gists_url":"https://api.github.com/users/shashwat-vik/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwat-vik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwat-vik/subscriptions","organizations_url":"https://api.github.com/users/shashwat-vik/orgs","repos_url":"https://api.github.com/users/shashwat-vik/repos","events_url":"https://api.github.com/users/shashwat-vik/events{/privacy}","received_events_url":"https://api.github.com/users/shashwat-vik/received_events","type":"User","site_admin":false},"body":"1) Autocomplete now tries with other query combinations when normal approach fails.\r\n\r\n2) With other query combinations, phone numbers are leveraged to find correspondence for true predictions. For this number parser is also used to reduce numbers to standardized format.\r\n\r\n3) All the API calls are routed though a single graceful request function. This add the capability to change keys dynamically when calls failure happens, without breaking other parts.\r\n\r\n4) Global JSON objects' dictionary created to store data for rows with precise predictions. This can be used later by other functions rather than making direct API calls.\r\n\r\nFor Issue #17 ","created_at":"2016-09-27T00:54:31Z","updated_at":"2016-09-27T01:30:30Z","closed_at":"2016-09-27T01:29:47Z","merged_at":"2016-09-27T01:29:46Z","merge_commit_sha":"c403201d6a6998a10ed5a074ae491901c37be9db","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43/commits","review_comments_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43/comments","review_comment_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/43/comments","statuses_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/statuses/09a13781c29d1dbdec83a1bfa34dcfc074df1a29","head":{"label":"shashwat-vik:master","ref":"master","sha":"09a13781c29d1dbdec83a1bfa34dcfc074df1a29","user":{"login":"shashwat-vik","id":17675065,"avatar_url":"https://avatars.githubusercontent.com/u/17675065?v=3","gravatar_id":"","url":"https://api.github.com/users/shashwat-vik","html_url":"https://github.com/shashwat-vik","followers_url":"https://api.github.com/users/shashwat-vik/followers","following_url":"https://api.github.com/users/shashwat-vik/following{/other_user}","gists_url":"https://api.github.com/users/shashwat-vik/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwat-vik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwat-vik/subscriptions","organizations_url":"https://api.github.com/users/shashwat-vik/orgs","repos_url":"https://api.github.com/users/shashwat-vik/repos","events_url":"https://api.github.com/users/shashwat-vik/events{/privacy}","received_events_url":"https://api.github.com/users/shashwat-vik/received_events","type":"User","site_admin":false},"repo":{"id":69086811,"name":"scrap-preprocessor","full_name":"shashwat-vik/scrap-preprocessor","owner":{"login":"shashwat-vik","id":17675065,"avatar_url":"https://avatars.githubusercontent.com/u/17675065?v=3","gravatar_id":"","url":"https://api.github.com/users/shashwat-vik","html_url":"https://github.com/shashwat-vik","followers_url":"https://api.github.com/users/shashwat-vik/followers","following_url":"https://api.github.com/users/shashwat-vik/following{/other_user}","gists_url":"https://api.github.com/users/shashwat-vik/gists{/gist_id}","starred_url":"https://api.github.com/users/shashwat-vik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shashwat-vik/subscriptions","organizations_url":"https://api.github.com/users/shashwat-vik/orgs","repos_url":"https://api.github.com/users/shashwat-vik/repos","events_url":"https://api.github.com/users/shashwat-vik/events{/privacy}","received_events_url":"https://api.github.com/users/shashwat-vik/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/shashwat-vik/scrap-preprocessor","description":null,"fork":true,"url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor","forks_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/forks","keys_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/teams","hooks_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/hooks","issue_events_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/issues/events{/number}","events_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/events","assignees_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/assignees{/user}","branches_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/branches{/branch}","tags_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/tags","blobs_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/git/refs{/sha}","trees_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/statuses/{sha}","languages_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/languages","stargazers_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/stargazers","contributors_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/contributors","subscribers_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/subscribers","subscription_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/subscription","commits_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/commits{/sha}","git_commits_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/git/commits{/sha}","comments_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/comments{/number}","issue_comment_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/issues/comments{/number}","contents_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/contents/{+path}","compare_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/merges","archive_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/downloads","issues_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/issues{/number}","pulls_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/pulls{/number}","milestones_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/milestones{/number}","notifications_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/labels{/name}","releases_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/releases{/id}","deployments_url":"https://api.github.com/repos/shashwat-vik/scrap-preprocessor/deployments","created_at":"2016-09-24T07:13:59Z","updated_at":"2016-09-26T03:56:51Z","pushed_at":"2016-09-27T00:43:08Z","git_url":"git://github.com/shashwat-vik/scrap-preprocessor.git","ssh_url":"git@github.com:shashwat-vik/scrap-preprocessor.git","clone_url":"https://github.com/shashwat-vik/scrap-preprocessor.git","svn_url":"https://github.com/shashwat-vik/scrap-preprocessor","homepage":null,"size":1571,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"rohitmanglik:master","ref":"master","sha":"05e8c4fd21236510f9420ff636ee326caa036b27","user":{"login":"rohitmanglik","id":677634,"avatar_url":"https://avatars.githubusercontent.com/u/677634?v=3","gravatar_id":"","url":"https://api.github.com/users/rohitmanglik","html_url":"https://github.com/rohitmanglik","followers_url":"https://api.github.com/users/rohitmanglik/followers","following_url":"https://api.github.com/users/rohitmanglik/following{/other_user}","gists_url":"https://api.github.com/users/rohitmanglik/gists{/gist_id}","starred_url":"https://api.github.com/users/rohitmanglik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohitmanglik/subscriptions","organizations_url":"https://api.github.com/users/rohitmanglik/orgs","repos_url":"https://api.github.com/users/rohitmanglik/repos","events_url":"https://api.github.com/users/rohitmanglik/events{/privacy}","received_events_url":"https://api.github.com/users/rohitmanglik/received_events","type":"User","site_admin":false},"repo":{"id":63495292,"name":"scrap-preprocessor","full_name":"rohitmanglik/scrap-preprocessor","owner":{"login":"rohitmanglik","id":677634,"avatar_url":"https://avatars.githubusercontent.com/u/677634?v=3","gravatar_id":"","url":"https://api.github.com/users/rohitmanglik","html_url":"https://github.com/rohitmanglik","followers_url":"https://api.github.com/users/rohitmanglik/followers","following_url":"https://api.github.com/users/rohitmanglik/following{/other_user}","gists_url":"https://api.github.com/users/rohitmanglik/gists{/gist_id}","starred_url":"https://api.github.com/users/rohitmanglik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohitmanglik/subscriptions","organizations_url":"https://api.github.com/users/rohitmanglik/orgs","repos_url":"https://api.github.com/users/rohitmanglik/repos","events_url":"https://api.github.com/users/rohitmanglik/events{/privacy}","received_events_url":"https://api.github.com/users/rohitmanglik/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rohitmanglik/scrap-preprocessor","description":null,"fork":false,"url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor","forks_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/forks","keys_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/teams","hooks_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/hooks","issue_events_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/events{/number}","events_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/events","assignees_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/assignees{/user}","branches_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/branches{/branch}","tags_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/tags","blobs_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/git/refs{/sha}","trees_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/statuses/{sha}","languages_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/languages","stargazers_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/stargazers","contributors_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/contributors","subscribers_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/subscribers","subscription_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/subscription","commits_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/commits{/sha}","git_commits_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/git/commits{/sha}","comments_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/comments{/number}","issue_comment_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/comments{/number}","contents_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/contents/{+path}","compare_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/merges","archive_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/downloads","issues_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues{/number}","pulls_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls{/number}","milestones_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/milestones{/number}","notifications_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/labels{/name}","releases_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/releases{/id}","deployments_url":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/deployments","created_at":"2016-07-16T17:47:05Z","updated_at":"2016-09-17T20:47:05Z","pushed_at":"2016-09-27T01:29:47Z","git_url":"git://github.com/rohitmanglik/scrap-preprocessor.git","ssh_url":"git@github.com:rohitmanglik/scrap-preprocessor.git","clone_url":"https://github.com/rohitmanglik/scrap-preprocessor.git","svn_url":"https://github.com/rohitmanglik/scrap-preprocessor","homepage":null,"size":1666,"stargazers_count":4,"watchers_count":4,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":11,"forks":5,"open_issues":11,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43"},"html":{"href":"https://github.com/rohitmanglik/scrap-preprocessor/pull/43"},"issue":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/43"},"comments":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/issues/43/comments"},"review_comments":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43/comments"},"review_comment":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/pulls/43/commits"},"statuses":{"href":"https://api.github.com/repos/rohitmanglik/scrap-preprocessor/statuses/09a13781c29d1dbdec83a1bfa34dcfc074df1a29"}}}}
{"actor":{"display_login":"rohitmanglik"}}