"""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('/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)