1
1
import requests
2
2
import json
3
3
# import related models here
4
+ from .models import CarDealer , DealerReview
4
5
from requests .auth import HTTPBasicAuth
5
6
6
7
8
+
7
9
# Create a `get_request` to make HTTP GET requests
8
10
# e.g., response = requests.get(url, params=params, headers={'Content-Type': 'application/json'},
9
11
# 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 )
10
21
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
11
30
12
31
# Create a `post_request` to make HTTP POST requests
13
32
# 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
15
44
16
45
# Create a get_dealers_from_cf method to get dealers from a cloud function
17
46
# def get_dealers_from_cf(url, **kwargs):
18
47
# - Call get_request() with specified arguments
19
48
# - 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).
20
70
21
71
22
72
# Create a get_dealer_reviews_from_cf method to get reviews by dealer id from a cloud function
23
73
# def get_dealer_by_id_from_cf(url, dealerId):
24
74
# - Call get_request() with specified arguments
25
75
# - 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
27
100
28
101
# Create an `analyze_review_sentiments` method to call Watson NLU and analyze text
29
102
# def analyze_review_sentiments(text):
30
103
# - Call get_request() with specified arguments
31
104
# - 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