11import requests
22import json
33# import related models here
4+ from .models import CarDealer , DealerReview
45from requests .auth import HTTPBasicAuth
56
67
8+
79# Create a `get_request` to make HTTP GET requests
810# e.g., response = requests.get(url, params=params, headers={'Content-Type': 'application/json'},
911# auth=HTTPBasicAuth('apikey', api_key))
12+ def get_request (url , ** kwargs ):
13+ #print(kwargs)
14+ print ("GET from {} " .format (url ))
15+ json_data = {}
16+ try :
17+ if "apikey" in kwargs :
18+ response = requests .get (url , headers = {'Content-Type' :'application/json' }, params = kwargs , auth = HTTPBasicAuth ("apikey" , kwargs ["apikey" ]))
19+ else :
20+ response = requests .get (url , headers = {'Content-Type' :'application/json' }, params = kwargs )
1021
22+ status_code = response .status_code
23+ print ("With status {} " .format (status_code ))
24+ json_data = json .loads (response .text )
25+ #print(json_data)
26+ except Exception as e :
27+ print ("Error " ,e )
28+
29+ return json_data
1130
1231# Create a `post_request` to make HTTP POST requests
1332# e.g., response = requests.post(url, params=kwargs, json=payload)
14-
33+ def post_request (url , payload , ** kwargs ):
34+ print (url )
35+ print (payload )
36+ print (kwargs )
37+ try :
38+ response = requests .post (url , params = kwargs , json = payload )
39+ except Exception as e :
40+ print ("Error" ,e )
41+ print ("Status Code " , {response .status_code })
42+ data = json .loads (response .text )
43+ return data
1544
1645# Create a get_dealers_from_cf method to get dealers from a cloud function
1746# def get_dealers_from_cf(url, **kwargs):
1847# - Call get_request() with specified arguments
1948# - Parse JSON results into a CarDealer object list
49+ def get_dealers_from_cf (url , ** kwargs ):
50+ results = []
51+ # Call get_request with a URL parameter
52+ json_result = get_request (url )
53+ #print(json_result)
54+ if json_result :
55+ # Get the row list in JSON as dealers
56+ dealers = json_result ["entries" ]
57+ # For each dealer object
58+ for dealer_doc in dealers :
59+ # Get its content in `doc` object
60+ #dealer_doc = dealers["doc"]
61+ # Create a CarDealer object with values in `doc` object
62+ dealer_obj = CarDealer (address = dealer_doc ["address" ], city = dealer_doc ["city" ], full_name = dealer_doc ["full_name" ],
63+ id = dealer_doc ["id" ], lat = dealer_doc ["lat" ], long = dealer_doc ["long" ],
64+ short_name = dealer_doc ["short_name" ],
65+ st = dealer_doc ["st" ], zip = dealer_doc ["zip" ])
66+ results .append (dealer_obj )
67+
68+ return results
69+ #Coding practice: create a get_dealer_by_id or get_dealers_by_state method in restapis.py. HINT, the only difference from the get_dealers_from_cf method is adding a dealer id or state URL parameter argument when calling the def get_request(url, **kwargs): method such as get_request(url, dealerId=dealerId).
2070
2171
2272# Create a get_dealer_reviews_from_cf method to get reviews by dealer id from a cloud function
2373# def get_dealer_by_id_from_cf(url, dealerId):
2474# - Call get_request() with specified arguments
2575# - Parse JSON results into a DealerView object list
26-
76+ def get_dealer_reviews_from_cf (url , dealer_id ):
77+ results = []
78+ # Call get_request with a URL parameter
79+ json_result = get_request (url , dealerId = dealer_id )
80+
81+ if "entries" in json_result :
82+ reviews = json_result ["entries" ]
83+ # For each review object
84+ for review in reviews :
85+ review_obj = DealerReview (
86+ dealership = review ["dealership" ],
87+ name = review ["name" ],
88+ purchase = review ["purchase" ],
89+ review = review ["review" ],
90+ purchase_date = review ["purchase_date" ],
91+ car_make = review ["car_make" ],
92+ car_model = review ["car_model" ],
93+ car_year = review ["car_year" ],
94+ sentiment = analyze_review_sentiments (review ["review" ]),
95+ id = review ['id' ]
96+ )
97+ results .append (review_obj )
98+ #print(results[0])
99+ return results
27100
28101# Create an `analyze_review_sentiments` method to call Watson NLU and analyze text
29102# def analyze_review_sentiments(text):
30103# - Call get_request() with specified arguments
31104# - Get the returned sentiment label such as Positive or Negative
32-
33-
34-
105+ def analyze_review_sentiments (dealerreview , ** kwargs ):
106+ API_KEY = "MxFCXuNdAY4i7RdB1PTx0LGspyMbNVmVOKxtpJ5XPxkz"
107+ #API_KEY="0614ccd0-1e9f-4d49-923e-e7741f963747:Q3ZX2R1b3oBEb0XebEO99rpulJ31yoY7X5GfjoQykN4RpM9eThYrrs14If0aOHtG"
108+ NLU_URL = 'https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/93a549ab-8f15-404e-a8ed-97f6fb8a35aa/v1/analyze?version=2020-08-01'
109+ params = json .dumps ({"text" : dealerreview , "features" : {"sentiment" : {}}})
110+ response = requests .post (NLU_URL ,data = params ,headers = {'Content-Type' :'application/json' },auth = HTTPBasicAuth ("apikey" , API_KEY ))
111+
112+ #print(response.json())
113+ try :
114+ sentiment = response .json ()['sentiment' ]['document' ]['label' ]
115+ return sentiment
116+ except :
117+ return "neutral"
0 commit comments