Przeglądaj źródła

Merged DrkSephy/django-hackathon-starter into default

Eswari Pravallika Swarna 10 lat temu
rodzic
commit
94769ab772

+ 2 - 1
hackathon_starter/hackathon/admin.py

@@ -1,7 +1,8 @@
 from django.contrib import admin
-from hackathon.models import UserProfile, Profile
+from hackathon.models import UserProfile, Profile, InstagramProfile
 
 # Register your models here.
 admin.site.register(UserProfile)
 admin.site.register(Profile)
+admin.site.register(InstagramProfile)
 

+ 7 - 0
hackathon_starter/hackathon/models.py

@@ -18,6 +18,13 @@ class Profile(models.Model):
     def __unicode__(self):
         return unicode(self.user)
 
+class InstagramProfile(models.Model):
+    user = models.ForeignKey(User)
+    access_token = models.CharField(max_length=200)
+
+    def __unicode__(self):
+        return unicode(self.user)
+
 class Snippet(models.Model):
     created = models.DateTimeField(auto_now_add=True)
     title = models.CharField(max_length=100, blank=True, default='')

+ 0 - 120
hackathon_starter/hackathon/scripts/paypal.py

@@ -1,120 +0,0 @@
-
-'''
-paypal.py contains a handful of methods for interacting
-with Paypal data and returning the responses as JSON.
-'''
-
-import requests
-import simplejson as json2
-import unicodedata
-import urllib
-
-authorization_url = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize?client_id='
-access_token_url  = 'https://api.sandbox.paypal.com/v1/oauth2/token'
-
-#password:testing123
-#cafe.mui-buyer@gmail.com
-#https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize?client_id=AcOIP0f8NTl3iv5Etw2nakNrgPmjE65v84a2NQD5mm8-z-dTyhMSNHZuxHbHUaTAxLQIE0u-A2DFEY8M&response_type=code&scope=openid&redirect_uri=http://localhost:8000/hackathon/paypal/
-
-
-class PaypalOauthClient(object):
-	'''
-	Python Client for Paypal API.
-	'''
-
-	access_token = None
-	user_data = None
-	token_type = None
-	refresh_token = None
-
-	def __init__(self, client_id, client_secret):
-		'''
-		Parameters:
-			client_id: String
-				- The client_id from registering application
-				  on Instagram.
-			client_secret: String
-				- The client_secret from registering application
-				  on Instagram.
-		'''
-
-		self.client_id 		= client_id
-		self.client_secret 	= client_secret
-
-
-	def get_authorize_url(self):
-		''' 
-		Obtains authorize url link with given client_id.
-
-		Returns:
-			auth_url: String
-				- The authorization url.
-		'''
-
-		auth_url = authorization_url + self.client_id + '&response_type=code&scope=openid&redirect_uri=http://localhost:8000/hackathon/paypal/'
-		return auth_url
-
-
-	def get_access_token(self, code):
-		''' 
-		Obtains access token from authorization code.
-
-		Parameters:
-			code: String
-				- The code is retrieved from the authorization url parameter
-				  to obtain access_token.
-		'''
-
-		headers = {
-					'Accept': 'application/json',
-					'Accept-Language': 'en_US',
-					'content-type': 'application/x-www-form-urlencoded'
-				  }
-		data = { 'grant_type': 'authorization_code',
-				  'code': code,
-				  'redirect_uri':'http://localhost:8000/hackathon/paypal'}
-
-
-		req = requests.post(access_token_url, data=data, headers=headers, auth=(self.client_id, self.client_secret))
-		
-		if req.status_code != 200:
-			raise Exception("Invalid response %s." %  req.status_code)
-		
-		content = unicodedata.normalize('NFKD', req.text).encode('ascii','ignore')
-		jsonlist = json2.loads(content)
-
-		#print jsonlist
-		self.access_token = jsonlist['access_token']
-		self.token_type = jsonlist['token_type']
-		self.refresh_token = jsonlist['refresh_token']
-
-		return self.refresh_token
-
-
-	def get_refresh_token(self, refresh_token):
-		'''
-		This methods obtain new access token when current access_token expires.
-		'''
-
-		link  = 'https://api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice'
-
-		headers = {
-					'Accept': 'application/json',
-					'Accept-Language': 'en_US',
-					'content-type': 'application/x-www-form-urlencoded'
-				  }
-		data = { 'grant_type': 'refresh_token',
-				  'refresh_token': refresh_token}
-
-		req = requests.post(link, data=data, headers=headers, auth=(self.client_id, self.client_secret))
-		
-		if req.status_code != 200:
-			raise Exception("Invalid response %s." %  req.status_code)
-		
-		content = unicodedata.normalize('NFKD', req.text).encode('ascii','ignore')
-		jsonlist = json2.loads(content)
-
-		#print jsonlist
-		self.access_token = jsonlist['access_token']
-		self.token_type = jsonlist['token_type']
-

+ 2 - 1
hackathon_starter/hackathon/scripts/twitter.py

@@ -75,7 +75,8 @@ class TwitterOauthClient(object):
 			''.join([str(random.randint(0, 9)) for i in range(24)]))
 		return n
 
-	
+	#def get_trends_available(self):
+
 		
 
 

+ 0 - 1
hackathon_starter/hackathon/templates/hackathon/api_examples.html

@@ -12,7 +12,6 @@
 		-->
 		<div class="col-sm-4"><a href="http://127.0.0.1:8000/hackathon/twilio/">Twilio Example</a></div>
 		<div class="col-sm-4"><a href="{{instagram_url}}">Instagram Example</a></div>
-		<div class="col-sm-4"><a href="{{paypal_url}}">Paypal Example</a></div>
 		<div class="col-sm-4"><a href="{{twitter_url}}">Twitter Example</a></div>
 		<div class="col-sm-4"><a href="http://localhost:8000/hackathon/quandlstocks/">Quandl Example</a></div>
 

+ 4 - 0
hackathon_starter/hackathon/templates/hackathon/instagram_q.html

@@ -12,6 +12,10 @@
 		  <button type="submit" class="btn btn-default">Search</button>
 		</form>
 	</div>
+	<div class="col-lg-12">
+		<br>
+		<p class="text-center">{{err_msg}}</p>
+	</div>
 
 	{% if geocode_result %}	
 	<div class="col-lg-12">

+ 0 - 1
hackathon_starter/hackathon/urls.py

@@ -22,7 +22,6 @@ urlpatterns = patterns('',
     url(r'^instagramUser/$', views.instagramUser, name='instagramUser'),
     url(r'^instagramMediaByLocation/$', views.instagramMediaByLocation, name='instagramMediaByLocation'),#
     url(r'^instagramUserMedia/$', views.instagramUserMedia, name='instagramUserMedia'),
-    url(r'^paypal/$', views.paypal, name='paypal'),
     url(r'^twitter/$', views.twitter, name='twitter'),
     url(r'^tumblr_login/$', views.tumblr_login, name='tumblr_login'),
     url(r'^twitter_login/$', views.twitter_login, name='twitter_login'),

+ 36 - 39
hackathon_starter/hackathon/views.py

@@ -19,7 +19,6 @@ from scripts.twilioapi import *
 from scripts.instagram import InstagramOauthClient
 from scripts.scraper import steamDiscounts
 from scripts.quandl import *
-from scripts.paypal import PaypalOauthClient
 from scripts.twitter import TwitterOauthClient
 
 # Python
@@ -28,14 +27,13 @@ from rest_framework.renderers import JSONRenderer
 from rest_framework.parsers import JSONParser
 
 # Models
-from hackathon.models import Snippet, Profile
+from hackathon.models import Snippet, Profile, InstagramProfile
 from hackathon.serializers import SnippetSerializer
 from hackathon.forms import UserForm
 
 
 getTumblr = TumblrOauthClient(settings.TUMBLR_CONSUMER_KEY, settings.TUMBLR_CONSUMER_SECRET)
 getInstagram = InstagramOauthClient(settings.INSTAGRAM_CLIENT_ID, settings.INSTAGRAM_CLIENT_SECRET)
-getPaypal = PaypalOauthClient(settings.PAYPAL_CLIENT_ID, settings.PAYPAL_CLIENT_SECRET)
 getTwitter = TwitterOauthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, settings.TWITTER_ACCESS_TOKEN, settings.TWITTER_ACCESS_TOKEN_SECRET)
 
 def index(request):
@@ -49,14 +47,13 @@ def index(request):
 
 def api_examples(request):
     instagram_url =getInstagram.get_authorize_url()
-    paypal_url = getPaypal.get_authorize_url()
     twitter_url = getTwitter.get_authorize_url()
     if not getTumblr.accessed:
         obtain_oauth_verifier = getTumblr.authorize_url()
     else:
         obtain_oauth_verifier = '/hackathon/tumblr'
     #obtain_oauth_verifier = getTumblr.authorize_url()
-    context = {'title': 'API Examples Page', 'tumblr_url': obtain_oauth_verifier, 'instagram_url':instagram_url, 'paypal_url': paypal_url, 'twitter_url':twitter_url}
+    context = {'title': 'API Examples Page', 'tumblr_url': obtain_oauth_verifier, 'instagram_url':instagram_url, 'twitter_url':twitter_url}
     return render(request, 'hackathon/api_examples.html', context)
 
 #################
@@ -205,27 +202,36 @@ def instagram(request):
     code = request.GET['code']
     getInstagram.get_access_token(code)
 
+    #check if user in User profile
     if request.user not in User.objects.all():
+        print "user not in User"
         try:  
-            user = User.objects.get(username=getInstagram.user_data['username'] )
+            user = User.objects.get(username=getInstagram.user_data['username'])
         except User.DoesNotExist:
             username = getInstagram.user_data['username']
             new_user = User.objects.create_user(username, username+'@example.com', 'password')
             new_user.save()
-            profile = Profile()
+            profile = InstagramProfile()
             profile.user = new_user
-            profile.oauth_token = getInstagram.client_id
-            #since instagram doesnt have oauth_secret value, using this field to temp set in access token
-            # for JSON response
-            profile.oauth_secret = getInstagram.access_token 
+            profile.access_token = getInstagram.access_token 
             profile.save()
 
         user = authenticate(username=getInstagram.user_data['username'], password='password')
         login(request, user)
+    else:
+        #check if user has an Instragram profile
+        try:  
+            user = User.objects.get(username=request.user.username)
+            instagramUser = InstagramProfile.objects.get(user=user.id)
+        except InstagramProfile.DoesNotExist:
+            new_user = User.objects.get(username=request.user.username)
+            profile = InstagramProfile(user = new_user, access_token=getInstagram.access_token)
+            profile.save()
 
     search_tag = 'kitten'
     #return tagged objects
     tagged_media = getInstagram.get_tagged_media(search_tag)
+
     context = {'title': 'Instagram', 'tagged_media': tagged_media, 'search_tag': search_tag}
     return render(request, 'hackathon/instagram.html', context)
 
@@ -247,41 +253,32 @@ def instagramUserMedia(request):
 def instagramMediaByLocation(request):
     if request.method == 'GET':
         if request.GET.items():
+            #check if user has a User profile
             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
+                #check if user has an Instagram profile
+                user = User.objects.get(username=request.user)
+                #if user has an Instagram profile, query the search
+                if InstagramProfile.objects.all().filter(user=user.id):
+                    address = request.GET.get('address_field')
+                    instagramUser = InstagramProfile.objects.get(user=user.id)
+                    access_token = instagramUser.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
+                        err_msg = ''
+                else:
+                    title, media, err_msg, location_ids, geocode_result = 'Media by location','', str(request.user)+ ' does not have an InstagramProfile','', ''
         else:
-            title, media,location_ids, geocode_result = 'Media by location', '','', ''
+            title, media, err_msg, location_ids, geocode_result = 'Media by location', '','', '', ''
 
 
-    context = {'title': title, 'geocode_result':geocode_result, 'media':media, 'list_id':location_ids}
+    context = {'title': title, 'geocode_result':geocode_result, 'media':media, 'list_id':location_ids, 'err_msg': err_msg}
     return render(request, 'hackathon/instagram_q.html', context)
 
 
 ####################
-#    PAYPAL API    #
-####################
-
-def paypal(request):
-    authorization_code = request.GET['code']
-    refresh_token = getPaypal.get_access_token(authorization_code)
-    getPaypal.get_refresh_token(refresh_token)
-    #getPaypal.userinfo()
-    print getPaypal.access_token
-    getPaypal.create_invoice()
-
-    context = {'title':'paypal'}
-    return render(request, 'hackathon/paypal.html', context)
-
-
-####################
 #   TWITTER API    #
 ####################
 def twitter(request):
@@ -305,7 +302,7 @@ def twitter(request):
         user = authenticate(username=getTwitter.username, password='password')
         login(request, user)
 
-    
+    #getTwitter.get_trends_available()
 
     context ={'title': 'twitter'}
     return render(request, 'hackathon/twitter.html', context)

+ 0 - 2
hackathon_starter/hackathon_starter/settings.py

@@ -115,8 +115,6 @@ TWITTER_TOKEN = 'F05dgLAzHEOalb4K2xDQ8Umm8'
 TWITTER_SECRET = 'Yy3a74Z7gvyhxRruJsvUtUl8uK8iv6qKkVqbZSijUxK71Z1qTY'
 INSTAGRAM_CLIENT_ID = '77dc10b9e3624e908ce437c0a82da92e'
 INSTAGRAM_CLIENT_SECRET = '8bcf3139857149aaba7acaa61288427f'
-PAYPAL_CLIENT_ID = 'AcOIP0f8NTl3iv5Etw2nakNrgPmjE65v84a2NQD5mm8-z-dTyhMSNHZuxHbHUaTAxLQIE0u-A2DFEY8M'
-PAYPAL_CLIENT_SECRET = 'EOKz-tkbFfRZavSD8T70f961v3NHRVAXXJu-5MU97YqSVKBsUH4NOoy_xQ2Am3EU3lN2m5RQiVb3eI-3'
 
 GOOGLEMAP_API_KEY = 'AIzaSyA7tttML91EGZ32S_FOOoxu-mbxN9Ojds8'