From 1cd86d9e47635e9e0db4bc10a810dd09185ee02d Mon Sep 17 00:00:00 2001 From: Phyks Date: Fri, 2 Jan 2015 18:40:31 +0100 Subject: [PATCH] Add known upload script --- known.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 known.py diff --git a/known.py b/known.py new file mode 100644 index 0000000..3ce2a78 --- /dev/null +++ b/known.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +from bs4 import BeautifulSoup +from bs4.element import Comment +import os +import base64 +import hashlib +import hmac +import requests +import sys + +""" +Script to import articles from a blogit blog in Known. + +Must be run with a correct API_KEY (see below) and from the `gen/` folder. +""" + + +def list_directory(path): + fichier = [] + for root, dirs, files in os.walk(path): + for i in files: + fichier.append(os.path.join(root, i)) + return fichier + + +def hmac_sha256(message, key): + return base64.b64encode(hmac.new(key.encode("utf-8"), + message.encode("utf-8"), + digestmod=hashlib.sha256) + .digest()).decode("utf-8") + + +def known_api(username, api_key, type, payload): + headers = { + "X-KNOWN-USERNAME": username, + "X-KNOWN-SIGNATURE": hmac_sha256("/"+type+"/edit", api_key) + } + return requests.post("https://known.phyks.me/"+type+"/edit", + data=payload, + headers=headers) + +if len(sys.arg) < 3: + print("Usage: "+sys.argv[0]+" USERNAME API_KEY [file]") + sys.exit() + +API_USERNAME = sys.argv[1] +API_KEY = sys.argv[2] +if len(sys.argv) <= 3: + files = [list_directory(i) for i in ["2013", "2014", "2015"]] +else: + files = [sys.argv[3]] + +for file in files: + print("Processing file "+file) + with open(file, 'r') as fh: + soup = BeautifulSoup(fh.read()) + + content = [] + for i in soup.div.find('header').next_siblings: + if i.name == "footer": + break + if type(i) != Comment: + content.append(i) + comment = soup.div.findAll(text=lambda text: isinstance(text, + Comment)) + comment = [i.strip() for i in comment[0].strip().split('\n')] + for j in comment: + if j.startswith("@title"): + title = j.split("=")[1] + elif j.startswith("@date"): + date = j.split("=")[1] + elif j.startswith("@tags"): + tags = j.split("=")[1] + tags = ', '.join(["#"+i.strip() for i in tags.split(',')]) + meta = { + "title": title, + "date": (str(date[4:8])+":"+str(date[2:4])+":"+str(date[0:2]) + + " "+str(date[9:11])+":"+str(date[11:13])+":00"), + "tags": tags, + } + + content = ''.join([str(i) for i in content]).strip() + content += "\n

"+meta["tags"]+"

" + payload = {"body": content, + "title": meta["title"], + "created": meta["date"]} + known_api(API_USERNAME, API_KEY, "entry", payload)