소스 검색

method for retrieving location id and to search media of that location media

mk200789 10 년 전
부모
커밋
6b8f3abedb

+ 20 - 10
hackathon_starter/hackathon/scripts/instagram.py

@@ -11,7 +11,8 @@ import json
 import simplejson as json2
 import googlemaps
 from django.conf import settings
-import re
+from datetime import datetime
+from time import strftime
 
 authorization_url = 'https://api.instagram.com/oauth/authorize/?client_id='
 access_token_url = 'https://api.instagram.com/oauth/access_token'
@@ -156,10 +157,9 @@ class InstagramOauthClient(object):
 
 
 	def search_location_ids(self, latitude, longitude, access_token):
-		search_location = 'https://api.instagram.com/v1/locations/search?lat='+str(latitude)+'&lng='+str(longitude)+'&access_token='+access_token+"&distance=2000"
+		search_location = 'https://api.instagram.com/v1/locations/search?lat='+str(latitude)+'&lng='+str(longitude)+'&access_token='+access_token+"&distance=5000"
 		req = requests.get(search_location)
-		content = json2.loads(req.content)
-		data = content
+		data = json2.loads(req.content)
 		list_of_ids =[]
 		if data['meta']['code'] != 200:
 			raise Exception("Invalid response %s." % data['meta']['code'])
@@ -168,8 +168,6 @@ class InstagramOauthClient(object):
 			for i in data:
 				if i == 'id':
 					list_of_ids.append(data[i])
-
-		print len(list_of_ids)
 		return list_of_ids
 
 	def search_location_media(self, list_location_ids, access_token):
@@ -177,11 +175,23 @@ class InstagramOauthClient(object):
 		for location in list_location_ids:
 			media_by_location = 'https://api.instagram.com/v1/locations/'+location+'/media/recent?access_token='+access_token
 			req = requests.get(media_by_location)
-			content = json2.loads(req.content)
-			media.append(content['data'])
-		
+			content_all = json2.loads(req.content)
+			if content_all['pagination']:
+				temp_media=[]
+				next_url = content_all['pagination']['next_url']
+				req = requests.get(next_url)
+				content = json2.loads(req.content)
+				for i in content['data']:
+					i['created_time'] = datetime.fromtimestamp(int(i['created_time'])).strftime('%Y-%m-%d %H:%M:%S')
+					temp_media.append(i)
+				media += [temp_media]
+			else:
+				for i in content_all['data']:
+					for data in i:
+						if data == 'created_time':
+							i[data]= datetime.fromtimestamp(int(i[data])).strftime('%Y-%m-%d %H:%M:%S')
+				media.append(content_all['data'])
 		return media
 
 
 
-		

+ 19 - 13
hackathon_starter/hackathon/templates/hackathon/instagram_q.html

@@ -4,26 +4,32 @@
 	{% include 'hackathon/base.html' %}
 	<h1 class="text-center"> {{ title }}</h1> 
 	<br>
+	<div class="container text-center">
 		<form class="form-inline" method='get' action="/hackathon/instagramMediaByLocation/">
 		  <div class="form-group">
-		    <label for="address">Address </label>
-		    <input type="text" name="address_field" class="form-control" placeholder="">
+		    <input type="text" name="address_field" class="form-control" placeholder="address">
 		  </div>
 		  <button type="submit" class="btn btn-default">Search</button>
 		</form>
 	</div>
-	{% if geocode_result %}
-		{{geocode_result.lat}}, {{geocode_result.lng}}
-		
-		{{list_id}}
-		
-		{% for list in media %}
-			{% for user in list %}
-				<img src="{{user.images.thumbnail.url}}">
-			{% endfor %}
-		{% endfor %}
-		
 
+	{% if geocode_result %}	
+	<div class="col-lg-12">
+		<div class="table-responsive">
+			<h4 class="text-center"> Latitude: {{geocode_result.lat}} </h3>
+			<h4 class="text-center"> Longitude: {{geocode_result.lng}} </h3>
+
+			<p class="text-center"> {{list_id}} </p>
+			<table class="table">
+				{% for list in media %}
+					{% for user in list %}
+						<a href="{{user.link}}" title="{{user.created_time}}"><img src="{{user.images.thumbnail.url}}"></a>
+					{% endfor %}
+				{% endfor %}
+
+			</table>
+		</div>
+	</div>
 	{% endif %}
 
 </html>

+ 15 - 13
hackathon_starter/hackathon/views.py

@@ -197,20 +197,22 @@ def instagramUserMedia(request):
 
 def instagramMediaByLocation(request):
     if request.method == 'GET':
-        if request.user in User.objects.all():
-            address = request.GET.get('address_field')
-            user_id = User.objects.get(username=request.user).id
-            access_token = Profile.objects.get(user=user_id).oauth_secret
-            #lat, lng = getInstagram.search_for_location(address, access_token)
-            geocode_result = getInstagram.search_for_location(address, access_token)
-            if geocode_result:
-                location_ids =getInstagram.search_location_ids(geocode_result['lat'], geocode_result['lng'], access_token)
-                media = getInstagram.search_location_media(location_ids, access_token)
-            else:
-                media = '' 
-                list_id=''
+        if request.GET.items():
+            if request.user in User.objects.all():
+                address = request.GET.get('address_field')
+                user_id = User.objects.get(username=request.user).id
+                access_token = Profile.objects.get(user=user_id).oauth_secret
+                #lat, lng = getInstagram.search_for_location(address, access_token)
+                geocode_result = getInstagram.search_for_location(address, access_token)
+                if geocode_result:
+                    location_ids =getInstagram.search_location_ids(geocode_result['lat'], geocode_result['lng'], access_token)
+                    media = getInstagram.search_location_media(location_ids, access_token)
+                    title = address
+        else:
+            title, media,location_ids, geocode_result = 'Media by location', '','', ''
+
 
-    context = {'title':'Media by location', 'geocode_result':geocode_result, 'media':media, 'list_id':location_ids}
+    context = {'title': title, 'geocode_result':geocode_result, 'media':media, 'list_id':location_ids}
     return render(request, 'hackathon/instagram_q.html', context)