Рубрики
Без рубрики

Миграция Disqus Комментарии к высказываниям (в вопросах GitHub) с Python

Когда я заменил тему jekyll и мою jekyll-readtheDocs с MkDocs и в блоге, настроенную версию T … помеченных с помощью HOMTO, DISQUS, UTMANCES, PYTHON.

Когда я заменил Jekyll и мой Jekyll-readthedocs Тема с Mkdocs и а Индивидуальная версия для блога Материал для темы MKDOCS , Urls моих постов изменились.

Я использовал Disqus Для комментариев И они обеспечивают способ мигрировать нити из старых URL-адресов на новые URL. К сожалению, на этот раз это не сработало по какой-то причине (Я уже сделал это один раз в прошлом, и это работало нормально).

Я прочитал все больше и больше критики о Disqus, связанной с конфиденциальностью, поэтому я посмотрел на замену. Миграция потоков Disqus не работала, так что это был идеальный случай!

Я прочитал несколько веб-страниц и заинтересовался ИССО Отказ К сожалению, я не управлял Чтобы установить его на My Raspberry Pi.

Поэтому я пошел с гораздо более простым решением: Высказывания Отказ Вы в основном включите приложение GitHub на вашем репозитории, Добавьте скрипт на ваших постах, и Voilà: ваш новый комментарий Работает по вопросам GitHub.

Я не полностью удовлетворен, потому что читатели должны войти в систему с их учетной записью GitHub, чтобы комментировать (без анонимных комментариев), и вы не можете иметь вложенные дискуссии (ну, как в вопросах GitHub).

Но это было действительно легко настроить 😄!

Теперь мне просто нужно было мигрировать комментарии Disqus в проблемы GitHub. Чтобы сделать это полуавтоматически, я написал следующий скрипт. ” Полуавтоматически «потому что мне все еще пришлось написать комментарий« тест »в каждом из моих постов, поэтому высказывания будут инициировать/создавать проблемы. Я думаю, что он может быть реализован в сценарии напрямую, но поскольку у меня только дюжина постов, я взял легкий/повторяющийся путь.

Сценарий

!!! Предупреждение вам придется создавать начальные проблемы перед запуском скрипта! Служите свой блог локально и напишите «тест» комментарий в каждом посте, который имеет комментарии.

Во-первых, Экспортируйте свой Disqus Комментарии Отказ

Тогда вам понадобится два библиотека Python:

Вам также нужно будет создать токен на GitHub, с только что Общественный репос доступ.

Напишите следующие переменные среды в файл и источник.

export FILEPATH="comments.xml"
export USERNAME="yourUsername"
export TOKEN="yourToken"
export REPOSITORY="yourUsername/yourUsername.github.io"
export BASE_URL="https://yourUsername.github.io/"

Теперь вы можете скопировать/вставить и запустить этот скрипт:

import xmltodict
from github import Github

FILEPATH = os.environ["FILEPATH"]
USERNAME = os.environ["USERNAME"]
TOKEN = os.environ["TOKEN"]
REPOSITORY = os.environ["REPOSITORY"]
BASE_URL = os.environ["BASE_URL"]


def disqus_to_github():
    g = Github(TOKEN)
    repo = g.get_repo(REPOSITORY)
    issues = repo.get_issues()

    with open(FILEPATH) as fd:
        data = xmltodict.parse(fd.read())

    data = data["disqus"]

    threads = [dict(t) for t in data["thread"]]
    posts = sorted((dict(p) for p in data["post"]), key=lambda d: d["createdAt"])

    # only keep threads with comments
    twc_ids = set(p["thread"]["@dsq:id"] for p in posts)
    threads = {t["@dsq:id"]: t for t in threads if t["@dsq:id"] in twc_ids}

    # associate the thread to each post
    for post in posts:
        post["thread"] = threads[post["thread"]["@dsq:id"]]

    # associate the related GitHub issue to each thread
    # warning: the issues need to exist before you run this script!
    # write a "test" comment in each one of your post with comments
    # to make Utterances create the initial issues
    for thread in threads.values():
        for issue in issues:
            if issue.title == thread["link"].replace(BASE_URL, ""):
                thread["issue"] = issue
                break

    # iterate on posts and create issues comments accordingly
    for i, post in enumerate(posts, 1):
        name = post["author"]["name"]
        user = post["author"].get("username")
        mention = " @" + user if user and not user.startswith("disqus_") else ""
        date = post["createdAt"]
        message = post["message"]
        issue = post["thread"]["issue"]
        body = f"*Original date: {date}*\n\n{message}"
        # don't add original author when it's you
        if user != USERNAME:
            body = f"*Original author:* **{name}{mention}**  \n{body}" 
        print(f"Posting {i}/{len(posts)} to issue {issue.number}    \r", end="")
        issue.create_comment(body)

    print()


if __name__ == "__main__":
    disqus_to_github()

Я написал это только для одноразового, личного использования, чтобы он мог легко сбой, когда попробуешь это! Просто используйте свои навыки Python и адаптируйте его 😉

Оригинал: “https://dev.to/pawamoy/migrate-disqus-comments-to-utterances-in-github-issues-with-python-3ic9”