Когда я заменил 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”