"""Provides a flask route that receives webhooks from WordPress (expecting
`post_content`, `post_name`, and `post_url`), attempts to convert into BBcode,
then posts it to a `forum.hardware.fr` topic.
HFR credentials are stored in a separate `credentials.json` JSON file. See
`hfr.py` for details on how to generate the `user_hash`. `pre_title` can be
anything, just add as many `\n`s as you wish at the end of the string.
{
"user": "",
"user_hash": "",
"posturl": "",
"pre_title": ""
}
"""
import logging
import urllib.parse
import json
from flask import Flask, request
from converter import HTMLtoBBcode
from hfr import post_HFR
app = Flask(__name__)
CREDENTIALS_FILE = 'credentials.json'
parser = HTMLtoBBcode()
with open(CREDENTIALS_FILE, 'r') as fp:
config = json.load(fp)
@app.route('/')
def webhook_home():
return "
Hello world
"
@app.route('/wordpress_webhook', methods=['POST'])
def webhook_handler():
"""Function doing all the work."""
logger.info('got called, {}'.format(request))
webhook_data = urllib.parse.parse_qs(request.get_data(as_text=True))
logger.info(webhook_data)
parser.feed(webhook_data['post_content'][0])
content = parser.output
title = webhook_data['post_name'][0].replace('-', ' ')
wordpress_url = webhook_data['post_url'][0]
title_BB = '[url={url}][b]{title}[/b][/url]\n\n'.format(
url=wordpress_url,
title=title)
post_BB = config['pre_title'] + title_BB + content
logger.info(post_BB)
#outcome = post_HFR(config['user'],
# config['user_hash'],
# config['posturl'],
# post_BB)
#logger.info(outcome)
#logger.info(outcome.text)
return ''
def prepare_logger(logger_name=__name__):
"""Simple logger preparation function
"""
logger = logging.getLogger(logger_name)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter(
'{asctime} {name} {levelname:8s} {message}',
style='{')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
logger = prepare_logger()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=54321, debug=True)