Переглянути джерело

Merged DrkSephy/django-hackathon-starter into default

Wan Kim Mok 10 роки тому
батько
коміт
bab4d3d021

+ 20 - 20
hackathon_starter/hackathon/scripts/meetup.py

@@ -8,27 +8,27 @@ import simplejson as json
 USERDATA = 'https://api.meetup.com/2/member/self/?access_token='
 
 def retrieveUserData(url):
-	req = requests.get(url)
-	content = json.loads(req.content)
-	filteredData = []
-	data = {}
-	data['name'] = content['name']
-	data['country'] = content['country'].upper()
-	data['city'] = content['city']
-	data['state'] = content['state']
-	data['status'] = content['status']
-	filteredData.append(data)
-	return filteredData
+    req = requests.get(url)
+    content = json.loads(req.content)
+    filteredData = []
+    data = {}
+    data['name'] = content['name']
+    data['country'] = content['country'].upper()
+    data['city'] = content['city']
+    data['state'] = content['state']
+    data['status'] = content['status']
+    filteredData.append(data)
+    return filteredData
 
 def retrieveDashboard(url):
-	req = requests.get(url)
-	content = json.loads(req.content)
-	filteredData = []
-	data = {}
-	data['last_event'] = content['last_event']['venue']
-	data['group'] = content['last_event']['group']['name']
-	data['name'] = content['last_event']['name']
-	filteredData.append(data)
-	return filteredData
+    req = requests.get(url)
+    content = json.loads(req.content)
+    filteredData = []
+    data = {}
+    data['last_event'] = content['last_event']['venue']
+    data['group'] = content['last_event']['group']['name']
+    data['name'] = content['last_event']['name']
+    filteredData.append(data)
+    return filteredData
 
 

+ 6 - 5
hackathon_starter/hackathon/scripts/nytimes.py

@@ -12,10 +12,11 @@ def fetcharticle(apikey, url):
     data = json.loads(req.content)
     parsedData = []
     for datum in data['results']:
-        new_data = {"title": datum["title"],
-                "abstract": datum["abstract"],
-                "section": datum["section"],
-                "byline": datum["byline"],
-                }
+        new_data = {
+            "title": datum["title"],
+            "abstract": datum["abstract"],
+            "section": datum["section"],
+            "byline": datum["byline"],
+        }
         parsedData.append(new_data)
     return parsedData

+ 98 - 98
hackathon_starter/hackathon/scripts/scraper.py

@@ -8,111 +8,111 @@ import itertools
 from bs4 import BeautifulSoup
 
 def fetchHTML(url):
-	'''
-	Returns HTML retrived from a url.
+    '''
+    Returns HTML retrived from a url.
 
-	Parameters:
-		url: String
-			- The URL to fetch HTML from
+    Parameters:
+        url: String
+            - The URL to fetch HTML from
 
-	Returns:
-		html: String
-			- The HTML from a given URL
-	'''
-	req = requests.get(url)
-	html = req.text
-	return html
+    Returns:
+        html: String
+            - The HTML from a given URL
+    '''
+    req = requests.get(url)
+    html = req.text
+    return html
 
 def extractTag(content, tag, className=None):
-	'''
-	Returns data embed within a tag, along
-	with an optional class for filtering.
-
-	Parameters:
-		content: String
-			- The HTML to parse
-		tag: String
-			- The HTML tag to scan for
-		class: String
-			- Optional filter for tag
-
-	Returns:
-		filteredData: List
-			- Content embed within searched tags
-	'''
-	soup = BeautifulSoup(content)
-	data = soup.findAll(tag, { 'class': className })
-	filteredData = []
-	for datum in data:
-		filteredData.append(datum.text)
-	return filteredData
+    '''
+    Returns data embed within a tag, along
+    with an optional class for filtering.
+
+    Parameters:
+        content: String
+            - The HTML to parse
+        tag: String
+            - The HTML tag to scan for
+        class: String
+            - Optional filter for tag
+
+    Returns:
+        filteredData: List
+            - Content embed within searched tags
+    '''
+    soup = BeautifulSoup(content)
+    data = soup.findAll(tag, { 'class': className })
+    filteredData = []
+    for datum in data:
+        filteredData.append(datum.text)
+    return filteredData
 
 
 def steamDiscounts():
-	req = requests.get('http://store.steampowered.com/search/?specials=1#sort_by=_ASC&sort_order=ASC&specials=1&page=1')
-	content = req.text
-	soup = BeautifulSoup(content)
-	allData = {id: {} for id in range(0, 25)}
-
-	# Get all divs of a specific class
-	releaseDate = soup.findAll('div', {'class': 'col search_released'})
-
-	# Get all release dates
-	releaseDates = []
-	id = 0
-	for date in releaseDate:
-		allData[id]['releaseDates'] = date.text
-		releaseDates.append(date.text)
-		id += 1
-
-	#print releaseDates
-
-	id = 0
-	gameName = soup.findAll('div', {'class': 'col search_name ellipsis'})
-
-	# Get all game names
-	gameNames = []
-	for name in gameName:
-		span = name.findAll('span', {'class': 'title'})
-		for tag in span:
-			allData[id]['name'] = tag.text
-			gameNames.append(tag.text)
-			id += 1
-
-	# print gameNames
-
-	discount = soup.findAll('div', {'class': 'col search_discount'})
-
-	id = 0
-	# Get all game discounts 
-	gameDiscounts = []
-	for discountedGame in discount:
-		span = discountedGame.findAll('span')
-		for tag in span:
-			allData[id]['discount'] = tag.text
-			gameDiscounts.append(tag.text)
-			id += 1
-
-	# print gameDiscounts
-
-	price = soup.findAll('div', {'class': 'col search_price discounted'})
-
-	id = 0
-	prices = []
-	# Get all discounted prices
-	for value in price:
-		br = value.findAll('br')
-		for tag in br:
-			allData[id]['price'] = tag.text.strip('\t')
-			prices.append(tag.text.strip('\t'))
-			id += 1
-
-	# Cleanup data
-	newData = []
-	for datum in allData:
-		newData.append(allData[datum])
-	# print prices
-	return newData
+    req = requests.get('http://store.steampowered.com/search/?specials=1#sort_by=_ASC&sort_order=ASC&specials=1&page=1')
+    content = req.text
+    soup = BeautifulSoup(content)
+    allData = {id: {} for id in range(0, 25)}
+
+    # Get all divs of a specific class
+    releaseDate = soup.findAll('div', {'class': 'col search_released'})
+
+    # Get all release dates
+    releaseDates = []
+    id = 0
+    for date in releaseDate:
+        allData[id]['releaseDates'] = date.text
+        releaseDates.append(date.text)
+        id += 1
+
+    #print releaseDates
+
+    id = 0
+    gameName = soup.findAll('div', {'class': 'col search_name ellipsis'})
+
+    # Get all game names
+    gameNames = []
+    for name in gameName:
+        span = name.findAll('span', {'class': 'title'})
+        for tag in span:
+            allData[id]['name'] = tag.text
+            gameNames.append(tag.text)
+            id += 1
+
+    # print gameNames
+
+    discount = soup.findAll('div', {'class': 'col search_discount'})
+
+    id = 0
+    # Get all game discounts 
+    gameDiscounts = []
+    for discountedGame in discount:
+        span = discountedGame.findAll('span')
+        for tag in span:
+            allData[id]['discount'] = tag.text
+            gameDiscounts.append(tag.text)
+            id += 1
+
+    # print gameDiscounts
+
+    price = soup.findAll('div', {'class': 'col search_price discounted'})
+
+    id = 0
+    prices = []
+    # Get all discounted prices
+    for value in price:
+        br = value.findAll('br')
+        for tag in br:
+            allData[id]['price'] = tag.text.strip('\t')
+            prices.append(tag.text.strip('\t'))
+            id += 1
+
+    # Cleanup data
+    newData = []
+    for datum in allData:
+        newData.append(allData[datum])
+    # print prices
+    return newData
 
 
 

+ 131 - 131
hackathon_starter/hackathon/scripts/tumblr.py

@@ -11,137 +11,137 @@ request_token_url   = 'http://www.tumblr.com/oauth/request_token'
 authorize_url       = 'http://www.tumblr.com/oauth/authorize'
 access_token_url    = 'http://www.tumblr.com/oauth/access_token'
 
-user_uri			= "http://api.tumblr.com/v2/user/info"
-blog_uri			= "http://api.tumblr.com/v2/blog/"
+user_uri            = "http://api.tumblr.com/v2/user/info"
+blog_uri            = "http://api.tumblr.com/v2/blog/"
 
 class TumblrOauthClient(object):
 
-	token = None
-	oauth_verifier = None
-	oauth_token = None
-	oauth_token_secret = None
-	accessed = False
-
-
-
-	def __init__(self, consumer_key, consumer_secret):
-		self.consumer_key = consumer_key
-		self.consumer_secret = consumer_secret
-		self.consumer = oauth2.Consumer(consumer_key, consumer_secret)
-		
-
-
-	def authorize_url(self):
-		client = oauth2.Client(self.consumer)
-		resp, content = client.request(request_token_url, "GET")
-		#parse content
-		if not self.oauth_token:
-			request_token = dict(urlparse.parse_qsl(content))
-			self.oauth_token = request_token['oauth_token'] #'QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl' #
-			self.oauth_token_secret = request_token['oauth_token_secret']#'u10SuRl2nzS8vFK4K7UPQexAvbIFBFrZBjA79XDlgoXFxv9ZhO' #
-		link = authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
-		return link
-
-
-	def access_token_url(self, oauth_verifier=''):
-		self.accessed = True
-		token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
-		self.oauth_verifier = oauth_verifier
-		print self.oauth_verifier
-		token.set_verifier(self.oauth_verifier)
-		client = oauth2.Client(self.consumer, token)
-		resp, content = client.request(access_token_url,"POST")
-		access_token = dict(urlparse.parse_qsl(content))
-		#set verified token
-		self.token = oauth2.Token(access_token['oauth_token'], access_token['oauth_token_secret'])
-		#print self.token
-			
-
-
-	def getUserInfo(self):
-		''' Returns users information. '''
-		client = oauth2.Client(self.consumer, self.token)
-		#print client
-		resp, content = client.request(user_uri, "POST")
-		if int(resp['status']) != 200:
-			raise Exception("Invalid response %s." % resp['status'])
-
-		#return content in json format
-		jsonlist = json.loads(content)
-		response = jsonlist['response']
-		user_info = response['user']
-		total_blogs = len(user_info['blogs'])
-		#print user_info
-		return user_info, total_blogs
-
-
-	def getBlogInfo(self, user):
-		''' Returns blogger's blog information '''
-		blog_info = blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
-		req = requests.get(blog_info)
-		
-		#if int(req.status_code) != 200:
-		#	raise Exception("Invalid response %s." % resp['status'])
-		
-
-		jsonlist = json.loads(req.content)
-		response = jsonlist['response']
-		blog 	 = response['blog']
-		blog['updated'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(blog['updated']))
-		return blog
-
-
-	def getTaggedInfo(self, tag):
-		''' Return tags related to blog with certain tag. '''
-
-		tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
-		req = requests.get(tagged_uri)
-		jsonlist = json.loads(req.content)
-
-		tags = []
-
-		meta = jsonlist['meta']
-		body = jsonlist['response']
-		for blog in body:
-			for data in blog:
-				if data == "tags":
-					#print blog[data]
-					for i in blog[data]:
-						m = re.match("(.*)(s*)s(t*)t(a*)a(r*)r(b*)b(u*)u(c*)c(k*)k(.*)", i.lower())
-						if not m:
-							tags.append(i)					
-
-		return tags	
-
-
-	def getTaggedBlog(self, tag):
-		''' Return the tagged blogs's captions or post.'''
-		
-		tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
-		req = requests.get(tagged_uri)
-		jsonlist = json.loads(req.content)
-		
-		meta = jsonlist['meta']
-		body = jsonlist['response']
-
-		tagtext = []
-
-		for blog in body:
-			#print "####"
-			for data in blog:
-				#post
-				if data == "body":
-					if blog[data]:
-						#print blog[data]
-						soup = BeautifulSoup(blog[data])
-						text = soup.get_text()
-						tagtext.append(text)
-				#an image
-				if data == "caption":
-					if blog[data]:
-						#print blog[data]
-						soup = BeautifulSoup(blog[data])
-						text = soup.get_text()					
-						tagtext.append(text)
-		
-		return tagtext
+    token = None
+    oauth_verifier = None
+    oauth_token = None
+    oauth_token_secret = None
+    accessed = False
+
+
+
+    def __init__(self, consumer_key, consumer_secret):
+        self.consumer_key = consumer_key
+        self.consumer_secret = consumer_secret
+        self.consumer = oauth2.Consumer(consumer_key, consumer_secret)
+        
+
+
+    def authorize_url(self):
+        client = oauth2.Client(self.consumer)
+        resp, content = client.request(request_token_url, "GET")
+        #parse content
+        if not self.oauth_token:
+            request_token = dict(urlparse.parse_qsl(content))
+            self.oauth_token = request_token['oauth_token'] #'QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl' #
+            self.oauth_token_secret = request_token['oauth_token_secret']#'u10SuRl2nzS8vFK4K7UPQexAvbIFBFrZBjA79XDlgoXFxv9ZhO' #
+        link = authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
+        return link
+
+
+    def access_token_url(self, oauth_verifier=''):
+        self.accessed = True
+        token = oauth2.Token(self.oauth_token, self.oauth_token_secret)
+        self.oauth_verifier = oauth_verifier
+        print self.oauth_verifier
+        token.set_verifier(self.oauth_verifier)
+        client = oauth2.Client(self.consumer, token)
+        resp, content = client.request(access_token_url,"POST")
+        access_token = dict(urlparse.parse_qsl(content))
+        #set verified token
+        self.token = oauth2.Token(access_token['oauth_token'], access_token['oauth_token_secret'])
+        #print self.token
+            
+
+
+    def getUserInfo(self):
+        ''' Returns users information. '''
+        client = oauth2.Client(self.consumer, self.token)
+        #print client
+        resp, content = client.request(user_uri, "POST")
+        if int(resp['status']) != 200:
+            raise Exception("Invalid response %s." % resp['status'])
+
+        #return content in json format
+        jsonlist = json.loads(content)
+        response = jsonlist['response']
+        user_info = response['user']
+        total_blogs = len(user_info['blogs'])
+        #print user_info
+        return user_info, total_blogs
+
+
+    def getBlogInfo(self, user):
+        ''' Returns blogger's blog information '''
+        blog_info = blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
+        req = requests.get(blog_info)
+        
+        #if int(req.status_code) != 200:
+        #   raise Exception("Invalid response %s." % resp['status'])
+        
+
+        jsonlist = json.loads(req.content)
+        response = jsonlist['response']
+        blog     = response['blog']
+        blog['updated'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(blog['updated']))
+        return blog
+
+
+    def getTaggedInfo(self, tag):
+        ''' Return tags related to blog with certain tag. '''
+
+        tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
+        req = requests.get(tagged_uri)
+        jsonlist = json.loads(req.content)
+
+        tags = []
+
+        meta = jsonlist['meta']
+        body = jsonlist['response']
+        for blog in body:
+            for data in blog:
+                if data == "tags":
+                    #print blog[data]
+                    for i in blog[data]:
+                        m = re.match("(.*)(s*)s(t*)t(a*)a(r*)r(b*)b(u*)u(c*)c(k*)k(.*)", i.lower())
+                        if not m:
+                            tags.append(i)                  
+
+        return tags 
+
+
+    def getTaggedBlog(self, tag):
+        ''' Return the tagged blogs's captions or post.'''
+        
+        tagged_uri = "http://api.tumblr.com/v2/tagged?tag="+tag+"&api_key="+self.consumer_key+"&limit=20"
+        req = requests.get(tagged_uri)
+        jsonlist = json.loads(req.content)
+        
+        meta = jsonlist['meta']
+        body = jsonlist['response']
+
+        tagtext = []
+
+        for blog in body:
+            #print "####"
+            for data in blog:
+                #post
+                if data == "body":
+                    if blog[data]:
+                        #print blog[data]
+                        soup = BeautifulSoup(blog[data])
+                        text = soup.get_text()
+                        tagtext.append(text)
+                #an image
+                if data == "caption":
+                    if blog[data]:
+                        #print blog[data]
+                        soup = BeautifulSoup(blog[data])
+                        text = soup.get_text()                  
+                        tagtext.append(text)
+        
+        return tagtext

+ 5 - 3
hackathon_starter/hackathon/scripts/yelp.py

@@ -8,8 +8,9 @@ CONSUMER_SECRET = 'VCK-4cDjtQ9Ra4HC5ltClNiJFXs'
 TOKEN = 'AWYVs7Vim7mwYyT1BLJA2xhNTs_vXLYS'
 TOKEN_SECRET = 'Rv4GrlYxYGhxUs14s0VBfk7JLJY'
 
-def requestData():
-    url = 'http://api.yelp.com/v2/business/marlowe-san-francisco-2?'
+def requestData(location):
+    data = []
+    url = 'http://api.yelp.com/v2/business/' + location + '?'
 
     consumer = oauth2.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
     oauth_request = oauth2.Request(method="GET", url=url)
@@ -28,5 +29,6 @@ def requestData():
     
     req = requests.get(signed_url)
     content = json.loads(req.content)
+    data.append(content)
 
-    return content
+    return data

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

@@ -17,6 +17,7 @@
 		<div class="col-sm-4"><a href="http://localhost:8000/hackathon/quandlstocks/">Quandl Example</a></div>
 		<div class="col-sm-4"><a href="http://localhost:8000/hackathon/meetupUser/">Meetup</a></div>
 		<div class="col-sm-4"><a href="http://localhost:8000/hackathon/yelp/">Yelp</a></div>
+		<div class="col-sm-4"><a href="http://127.0.0.1:8000/hackathon/nytimesarticles/">New York Times</a></div>
 
   	</div>
 

+ 0 - 27
hackathon_starter/hackathon/templates/hackathon/meetup.html

@@ -32,32 +32,5 @@
             </table>
         </div>
     </div>
-
-    <div class="col-lg-12">
-        <div class="table-responsive">
-            <table class="table table-bordered table-hover table-striped tablesorter">
-                <thead>
-                <tr>
-                <th class="header"> Last Meetup Group <i class="icon-sort"></i></th>
-                <th class="header"> Name <i class="icon-sort"></i></th>
-                <th class="header"> Last Event Location <i class="icon-sort"></i></th>
-                </tr>
-            </thead>
-            <tbody>
-
-            {% for key in data.dashboardData %}
-                <tr>
-                    <td>{{ key.group }}</td>
-                    <td>{{ key.name }}</td>
-                    <td>{{ key.last_event.name}}</td>
-    			</tr>
-            {% endfor %}
-
-            </tbody>
-            </table>
-        </div>
-    </div>
-    
-
 </body>
 </html>

+ 58 - 1
hackathon_starter/hackathon/templates/hackathon/yelp.html

@@ -1 +1,58 @@
-{{ data }} 
+<!DOCTYPE html>
+<html>
+    {% include 'hackathon/base.html' %}
+    <style>
+      .form-signin {
+        max-width: 550px;
+        padding: 15px;
+        margin: 0 auto;
+      }    
+    </style>
+
+    <body>
+      <h1 class="text-center"> Yelp API </h1>
+      <div class="container text-center">
+        <form class="form-signin" id="login_form" method="post" action="/hackathon/yelp/">
+          {% csrf_token %}
+          {% load bootstrap %}
+          <br>
+          <input type="text" name="location" class="form-control" placeholder="Enter a location, e.g: yelp-san-francisco" value="" required autofocus>
+          <br>
+          <button class="btn btn-lg btn-primary btn-block" type="submit">Search</button>
+          <input type="hidden" name="submit" value="submit" />
+        </form>
+      </div>
+
+      	{% if data %}
+	      <div class="col-lg-12">
+	        <div class="table-responsive">
+	            <table class="table table-bordered table-hover table-striped tablesorter">
+	                <thead>
+	                <tr>
+	                <th class="header"> Name <i class="icon-sort"></i></th>
+	                <th class="header"> Snippet Text <i class="icon-sort"></i></th>
+	                <th class="header"> Open? <i class="icon-sort"></i></th>
+	                <th class="header"> Review Count <i class="icon-sort"></i></th>
+	                <th class="header"> URL <i class="icon-sort"></i></th>
+	                </tr>
+	            </thead>
+	            <tbody>
+
+	            {% for key in data %}
+	                <tr>
+	                    <td>{{ key.name }}</td>
+	                    <td>{{ key.snippet_text }}</td>
+	                    <td>{{ key.is_closed }}</td>
+	                    <td>{{ key.review_count }}</td>
+	                    <td>{{ key.url |urlize }}</td>
+	    			</tr>
+	            {% endfor %}
+
+	            </tbody>
+	            </table>
+	        </div>
+	      </div>
+	    {% endif %}
+
+    </body>
+</html>

+ 10 - 3
hackathon_starter/hackathon/views.py

@@ -147,7 +147,10 @@ def facebook(request):
 #################
 
 def yelp(request):
-    data = requestData()
+    data = {}
+    if request.method == 'POST':
+        location = request.POST.get('location')
+        data = requestData(location)
     return render(request, 'hackathon/yelp.html', { 'data': data })
 
 #################
@@ -172,6 +175,9 @@ def meetupToken(request):
     if not MeetupToken.objects.all().exists():
         meetupToken = MeetupToken(access_token = access_token)
         meetupToken.save()
+    else:
+        meetupToken = MeetupToken(access_token = access_token)
+        MeetupToken.objects.all()[0] = meetupToken
     return HttpResponseRedirect('http://127.0.0.1:8000/hackathon/meetupUser/')
 
 def meetupUser(request): 
@@ -183,8 +189,9 @@ def meetupUser(request):
     meetupData = {}
     userData = retrieveUserData('https://api.meetup.com/2/member/self/?access_token=' + str(access_token))
     meetupData['userData'] = userData
-    dashboardData = retrieveDashboard('https://api.meetup.com/dashboard?access_token=' + str(access_token))
-    meetupData['dashboardData'] = dashboardData
+    # print 'https://api.meetup.com/dashboard?access_token=' + str(access_token)
+    #dashboardData = retrieveDashboard('https://api.meetup.com/dashboard?access_token=' + str(access_token))
+    #meetupData['dashboardData'] = dashboardData
     return render(request, 'hackathon/meetup.html', { 'data': meetupData })
 
 #################