115 lines
3.5 KiB
Python
115 lines
3.5 KiB
Python
import asyncio
|
|
import urllib.request
|
|
import json
|
|
import os, sys
|
|
from pathlib import Path
|
|
import time
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), "python-feedgen"))
|
|
from feedgen.feed import FeedGenerator
|
|
|
|
base_url = 'https://app.fffutu.re'
|
|
api_path = '/api/v1'
|
|
ghost_path = '/ghost/api/v3'
|
|
ghost_key = 'bdcdb2d50a3077e0543c0da764'
|
|
|
|
class BadStatusCodeError(Exception):
|
|
pass
|
|
|
|
async def getJson(url):
|
|
with urllib.request.urlopen(url) as url:
|
|
if url.getcode() in range(200, 299):
|
|
return(json.load(url))
|
|
else:
|
|
raise(BadStatusCodeError("Got Code" + url.getcode()))
|
|
|
|
async def queryOgs():
|
|
url = base_url + api_path + '/ogs'
|
|
return await getJson(url)
|
|
|
|
async def queryOg(id):
|
|
url = base_url + api_path + '/ogs?ogId=' + id
|
|
return await getJson(url)
|
|
|
|
async def queryStrikes(id):
|
|
url = base_url + api_path + '/strikes?ogId=' + id
|
|
return await getJson(url)
|
|
|
|
async def queryPosts() :
|
|
url = base_url + ghost_path + '/content/posts/?include=authors,tags&fields=slug,id,title,feature_imageupdated_at,published_at,url,custom_excerpt&key=' + ghost_key
|
|
return await getJson(url)
|
|
|
|
async def queryPost(id):
|
|
url = base_url + ghost_path + '/content/posts/' + id + '?fields=html&key=' + ghost_key
|
|
return await getJson(url)
|
|
|
|
async def queryPageTitle(name):
|
|
url = base_url + ghost_path + '/content/pages/slug/' + name + '?fields=title&key=' + ghost_key
|
|
return await getJson(url)
|
|
|
|
async def queryPage(name):
|
|
url = base_url + ghost_path + '/content/pages/slug/' + name + '?fields=html&key=' + ghost_key
|
|
return await getJson(url)
|
|
|
|
async def main(base_path):
|
|
Path(base_path).mkdir(parents=True, exist_ok=True)
|
|
og_list= await queryOgs()
|
|
for i in range(0, og_list['count']):
|
|
generator = FeedGenerator()
|
|
generator.id(og_list['ogs'][i]['ogId'])
|
|
generator.title('OG ' + og_list['ogs'][i]['name'])
|
|
generator.author({
|
|
'name': og_list['ogs'][i]['name'],
|
|
'email': og_list['ogs'][i]['email'],
|
|
'uri': og_list['ogs'][i]['website'],
|
|
'land': og_list['ogs'][i]['bundesland'],
|
|
'facebook': og_list['ogs'][i]['facebook'],
|
|
'instagram': og_list['ogs'][i]['instagram'],
|
|
'lat': og_list['ogs'][i]['lat'],
|
|
'lon': og_list['ogs'][i]['lon'],
|
|
'telegram': og_list['ogs'][i]['telegram'],
|
|
'twitter': og_list['ogs'][i]['twitter'],
|
|
'whatsapp': og_list['ogs'][i]['whatsapp'],
|
|
'youtube': og_list['ogs'][i]['youtube'],
|
|
})
|
|
generator.language('de')
|
|
|
|
strike_list = await queryStrikes(og_list['ogs'][i]['ogId'])
|
|
|
|
for strike in strike_list['strikes']:
|
|
entry = generator.add_entry()
|
|
entry.id(str(strike['location']) + '_' + str(strike['date']))
|
|
entry.title(strike['name'] + ' ' + time.strftime("%A, %d %b %Y %H:%M", time.gmtime(strike['date'])))
|
|
entry.description(strike['additionalInfo'])
|
|
if strike['eventLink']:
|
|
entry.link(href=strike['eventLink'])
|
|
|
|
generator.atom_file(base_path + "/" + og_list['ogs'][i]['ogId'] + ".atom" , pretty=True)
|
|
|
|
# Get App Team Posts
|
|
generator = FeedGenerator()
|
|
generator.id("AppAGFeed")
|
|
generator.title("Posts der App AG")
|
|
generator.author({
|
|
'name': "App AG",
|
|
'email': "app@fridaysforfuture.is",
|
|
'uri': "https://app.fffutu.re/",
|
|
})
|
|
generator.language('de')
|
|
|
|
posts = await queryPosts()
|
|
|
|
for post in posts["posts"]:
|
|
entry = generator.add_entry()
|
|
entry.id(post["id"])
|
|
entry.title(post['title'])
|
|
entry.description(post['custom_excerpt'])
|
|
# entry.link(href=strike['url'])
|
|
|
|
generator.atom_file(base_path + "/" + "AppAGFeed" + ".atom", pretty=True)
|
|
|
|
if len(sys.argv) < 2:
|
|
base_path = "./fff-feeds/"
|
|
else:
|
|
base_path = sys.argv[1]
|
|
|
|
asyncio.run(main(base_path))
|