Commit 2ed1ebd3 authored by Landon DeCoito's avatar Landon DeCoito

Merge branch '12-getconnectedfixer' into 'master'

Resolve "Fix the Get Connected Parse because you shouldn't have pushed it"

Closes #12

See merge request !29
parents b40071ef e1cd9773
# flask imports
from flask import Flask
from flask import Response
from flask import render_template
# app imports
from parscript import load_data
from getconnectedscript import load_getconn_data
# python imports
import json
app = Flask(__name__)
@app.route("/")
def display_default():
resp = Response(("Welcome to the masontoday API! Go to https://git.gmu.edu/srct/mason-today-web <br/><br/>"
+ "Feel free to go to /api/25live/ or /api/getconnected/ to find our api!").encode('utf-8'))
return resp
resp = render_template('welcomepage.html')
return resp
@app.route("/api/25live")
def display_data():
resp = Response(json.dumps(load_data(), ensure_ascii=False).encode('utf-8'))
resp = Response(json.dumps(load_data(), ensure_ascii=False)
.encode('utf-8'))
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
@app.route("/api/getconnected")
def display_GC_data():
resp = Response(json.dumps(load_getconn_data(), ensure_ascii=False).encode('utf-8'))
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
resp = Response(json.dumps(load_getconn_data(), ensure_ascii=False)
.encode('utf-8'))
resp.headers['Content-Type'] = 'application/json; charset=utf-8'
return resp
This diff is collapsed.
import requests
from bs4 import BeautifulSoup
from parscript import cleanup, doTheTime
# app imports
from parscript import cleanup, convertTime
# third party imports
import feedparser
from bs4 import BeautifulSoup
import requests
# TODO: ADD "getconnected" ATTRIBUTE TO LOAD_DATA DICTLIST
# DEV REMINDER: CHANGE THE LINES IN INTIALISATION ERROR MESSAGE (LINE 138)
def splitAndConvertTime(strin):
strin = strin.replace(" ", "")
strin = strin.split("-")
returnlist = ["", ""]
returnlist[1] = convertTime(strin[1])
if not (strin[0][-2:] == "am" or strin[0][-2:] == "AM") \
and not (strin[0][-2:] == "pm" or strin[0][-2:] == "PM"):
if (strin[1][-2:] == "am"):
returnlist[0] = convertTime(strin[0] + "am")
else:
returnlist[0] = convertTime(strin[0] + "pm")
else:
returnlist[0] = convertTime(strin[0])
return returnlist
# woah = cleanup(requests.get("https://getconnected.gmu.edu/events/events.rss").text)
# soup = BeautifulSoup(woah, "lxml")
# print soup.prettify
def load_getconn_data():
feedtext = requests.get("https://getconnected.gmu.edu/events/events.rss").text
feedtext = requests.get(
"https://getconnected.gmu.edu/events/events.rss").text
feedtext = cleanup(feedtext)
feed = feedparser.parse(feedtext) # this calls the RSS feed parser from !feedparser
# this calls the RSS feed parser from !feedparser
feed = feedparser.parse(feedtext)
# print feed, "\n\n\n"
# ctr = 0
dictlist = []
for entry in feed.entries:
# print"==================================="
uniqueid = entry.id[-7:]
# print uniqueid
title = entry.title
# print title
sumdetsoup = BeautifulSoup(entry.summary_detail["value"].encode("ascii", "replace"), "html.parser")
location = [sumdetsoup.div.span.text]
# print location
description = sumdetsoup.find_all("div")[1].text
# print description
datetime = sumdetsoup.b.text
# print datetime
if (datetime.count("(") == 1):
datesplit = datetime.split(", ")
weekday = datesplit[0]
month = datesplit[1].split(" ")
monthday = month[1]
month = month[0]
year = datesplit[2][:5]
parsedtimelist = doTheTime(datesplit[2][6:-1])
timestart = parsedtimelist[0]
timestop = parsedtimelist[1]
# print {"id":uniqueid, "title":title, "dayofweek":weekday, "dayofmonth":monthday, "month":month, "year":year, "timestart":timestart, "timestop":timestop, "location":location, "description":description}
dictlist.append({"id":uniqueid, "title":title, "dayofweek":weekday, "dayofmonth":monthday, "month":month, "year":year, "timestart":timestart, "timestop":timestop, "location":location, "description":description})
error = []
# this collects the attributes which are always there
# also creates the Soup and sets up for the rest of the parsing
try:
uniqueid = entry.id[-7:]
# print uniqueid
title = entry.title
# print title
sumdetsoup = BeautifulSoup(entry.summary_detail["value"]
.encode("utf-8"), "html.parser")
location = [sumdetsoup.div.span.text]
# print location
description = sumdetsoup.find_all("div")[1].text
# print description
datetime = sumdetsoup.b.text
# print datetime
except Exception as e:
error.append(str(e))
# this handles events which start and end on the same day
# if we've found an error, there's no point in continuing
if (datetime.count("(") == 1) and (error == []):
# parses out date info
try:
datesplit = datetime.split(", ")
weekday = datesplit[0]
temp = datesplit[1].split(" ")
monthday = temp[1]
month = temp[0]
year = datesplit[2][:5]
except Exception as e:
error.append(str(e))
# uses helper function to get the start and end time
try:
parsedtimelist = splitAndConvertTime(datesplit[2][6:-1])
timestart = parsedtimelist[0]
timestop = parsedtimelist[1]
except Exception as e:
error.append(str(e))
# appends the dictlist if no errors were found
if error == []:
dictlist.append({
"multiday": False, "id": uniqueid,
"title": title, "dayofweek": weekday,
"dayofmonth": monthday, "month": month,
"year": year, "timestart": timestart,
"timestop": timestop, "location": location,
"description": description
})
else:
dictlist.append({"id": uniqueid, "error": str(e),
"errorlocation": ""})
# this handles events which start on one day and end on another
elif error == []:
# getting the information for the start day/time
try:
datesplit = datetime.split(" - ")
tempsplits = datesplit[0].split(", ")
weekday = tempsplits[0]
month = tempsplits[1].split(" ")[0]
monthday = tempsplits[1].split(" ")[1]
year = tempsplits[2].split(" ")[0]
timestart = datesplit[0].split("(")[1][:-1]
timestart = convertTime(timestart)
except Exception as e:
error.append(str(e))
# getting the information for the end day/time
try:
tempsplits = datesplit[1].split(", ")
endweekday = tempsplits[0]
endmonth = tempsplits[1].split(" ")[0]
endmonthday = tempsplits[1].split(" ")[1]
endyear = tempsplits[2].split(" ")[0]
timestop = datesplit[1].split("(")[1][:-1]
timestop = convertTime(timestop)
except Exception as e:
error.append(str(e))
# append the dictlist if no errors were found
if error == []:
dictlist.append({
"multiday": True, "id": uniqueid,
"title": title, "dayofweek": weekday,
"dayofmonth": monthday, "month": month,
"year": year, "timestart": timestart,
"timestop": timestop, "location": location,
"description": description,
"enddayofweek": endweekday,
"enddayofmonth": endmonthday,
"endmonth": endmonth, "endyear": endyear
})
else:
dictlist.append({"id": uniqueid, "error": str(e)})
else:
dictlist.append({"error": "issue in initialization of event.\
check lines 40-56 in getconnectedscript.py"})
return dictlist
#print "\n\n", sumdetsoup.prettify()
#print"==================================="
#dictlist.append({"id":uniqueid, "title":entry_title, "dayofweek":weekday, "dayofmonth":monthday, "month":month, "year":year, "timestart":timestart, "timestop":timestop, "location":location, "description":description})
#This was intended to figure out what objects are in each entry and what appears only sometimes
#The results are:
####Every event has:
#-------summary
#-------published_parsed
#-------links
#-------author
#-------summary
#-------guidislink
#-------title_detail
#-------link
#-------authors
#-------title
#-------author_detail
#-------id
#-------published
####Some events have:
#-------tags
# Every event has:
# -------summary
# -------published_parsed
# -------links
# -------author
# -------summary
# -------guidislink
# -------title_detail
# -------link
# -------authors
# -------title
# -------author_detail
# -------id
# -------published
# Some events have:
# -------tags
This diff is collapsed.
<!doctype html>
<html>
<title>
MasonToday API
</title>
<body>
<h1>
MasonToday API
</h1>
<p>
We have two APIs available, pulled from two different sources of GMU events:
<ul>
<li>Get Connected: <a href="/api/getconnected">masontoday.gmu.io/api/getconnected</a></li>
<li>25 Live: <a href="/api/25live">masontoday.gmu.io/api/25live</a></li>
</ul>
</p>
<p>
Welcome to the API for MasonToday, courtesy of Student Run Computing and Technology! If you'd like, you can find the source code at the GMU Gitlab, <a href="https://git.gmu.edu/srct/mason-today-web">https://git.gmu.edu/srct/mason-today-web</a>
</p>
</body>
</html>
#!/bin/sh
export FLASK_APP=mason-today/app.py
export FLASK_APP=mason-today/__init__.py
export FLASK_DEBUG=1
flask run
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment