Files
knowledge-base/snippets/telegraph-publish-client-instruction.py

172 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""Публикует инструкцию Ярославу на Telegra.ph"""
import json
import urllib.parse
import urllib.request
ACCESS_TOKEN = "c38dcadb86e6edd7efc76496d9171d38beef6dc0f6a7ef2cd79bbae70e46"
VPN_KEY = "vpn://AAAIYXjanVVdcpswEH7PKTyevjl1QNiAM5MH100T4vwY06ZpQscjg-yoIYKAbMfN5Ay9RI_Qh850egf3Rl0hDHhMH1LwWOL7Pq1Wq13paacGT90LGceUkTip79duUkw8T3kvVeHFFOhNMCWOVcDrpq4oCtJ0tb5bIUFC0jEM1NE11KmUaKkEqQjs6K1KSUtIVA2Zmm4iU6nSnHhCo1VS9_gxNQATVPOUCb5dyTrpKo12JZctr4oLcMJHEOEJFeGrP7lMwC5EzYVvt4ibW9_NOSS5PGBlTsu4daTKXEtyRYhKpJVNWIbQNqRtQ61tqL0FnXgS0soYRDzzCFzdICiTRLsMO5mLRrsM5sEogTgIwgXxRzRKBHsjcckpzfTdKyxLfH9fQBL5nFvyAkoYt3w5ydX1ZY88ODYd8y_mO2tsX7KO-fHDu4fjuPfYGB7ZSTAJ9g7tcc88KLkjjYA369U2zabaNNVtSRTT-eiOLKUQzd-fzazItr1J_2qpWsNbpnfnR-Z8cnVMNM4YPfcXEekrj1XTRbNxYep_PU8zU5q4sRgn8QR75LPrsq7vxyRJage1fDl7GgLi7bkD4KvB0DrrDj-N4HO39so57F2cv82-QTSAdWJO-mQJ2hct02UnHozRRAfSBLqQI6KPH1NfFPHlqNCHNIEegh7khsuOBVaUEwCSWtcQAJoA8sIBoCVMFtXiMksYES3KWi1rW1nbli38bgaExCJSg9k4oJ5caq_xqfGle5TM8CmPptfzu-lpT_MeHobBZWe-uOh6dnAxPvWn9NA-SMNEklscE1-Odt5wyzBUNRz3LxuOjenRidroRHTv6lZ3rpdTf8GWuvpVH9gtMborq8AaiF3K0363lma6yw6ZH4WUcbEDCmoaalNFTdXU9zUDKSIeAzjyacIhl_qERDigcyK0IqylFLkNE36O70mWsmVLJdU9n60PH6OMR_kckKskGqWzZKbKZR6FMRdw6luBJndFir8oOoXlhMRzEm9Wy4u2Cc6MZ5dVHe7C6fS-EU5XCXiMWSJUUPghD4V25kf1DeHz5rjiOhZqfM_IV4pfi9s3lz3vyDNMXt8-meBZwHv_GpbLEi-mEadhesutvq9-rn6vfv35Bv8_Vj__fMuFLEnvOthk8ZZgJGGRZzm8zg5BbeRGfed55y-IVC9O"
# Telegraph Node helpers
def tag(name, children=None, attrs=None):
n = {"tag": name}
if children is not None:
n["children"] = children if isinstance(children, list) else [children]
if attrs:
n["attrs"] = attrs
return n
def p(*children): return tag("p", list(children))
def h3(text): return tag("h3", [text])
def h4(text): return tag("h4", [text])
def b(text): return tag("strong", [text])
def i(text): return tag("em", [text])
def ul(items): return tag("ul", [tag("li", [c]) if not isinstance(c, dict) else tag("li", [c]) for c in items])
def li_nodes(children): return tag("li", children)
def a(text, href): return tag("a", [text], {"href": href})
def code(text): return tag("code", [text])
def pre(text): return tag("pre", [text])
def hr(): return tag("hr")
def br(): return tag("br")
content = [
p("Привет! Это инструкция в 3 шага. Внизу есть ", b("логин/пароль Apple ID"), " и ", b("ключ VPN"),
" — их можно скопировать одним тапом."),
hr(),
h3("📱 Если у тебя iPhone или iPad"),
h4("Шаг 1. Выйти из своего Apple ID в App Store"),
p("Это нужно только чтобы скачать приложение. Твои фото и контакты никуда не денутся."),
tag("ol", [
tag("li", ["Открой ", b("«Настройки»"), " (серая шестерёнка)."]),
tag("li", ["Наверху нажми на ", b("своё имя"), "."]),
tag("li", ["Пролистай вниз до ", b("«Медиа и покупки»"), " → нажми."]),
tag("li", ["В окошке нажми ", b("«Выйти»"), "."]),
]),
p("⚠️ ", b("Важно!"), " Не нажимай «Выйти» в самом верху на своём имени — это не то. Выходишь ",
b("только"), " в разделе «Медиа и покупки»."),
h4("Шаг 2. Войти в американский Apple ID"),
tag("ol", [
tag("li", ["Открой ", b("App Store"), " (синяя иконка с буквой А)."]),
tag("li", ["В правом верхнем углу — кружок с силуэтом → нажми."]),
tag("li", [b("«Войти»"), " или ", b("«Использовать другой Apple ID»"), "."]),
tag("li", ["Введи логин и пароль — они ниже на этой странице."]),
]),
h4("Шаг 3. Подтверждение входа"),
p("Apple спросит, куда отправить код. Появится список номеров."),
p("→ Выбери номер, ", b("который заканчивается на ...70"), " (это мой)."),
p("→ Я получу SMS и сразу пришлю тебе цифры."),
p("→ Введи их. App Store стал американским."),
h4("Шаг 4. Скачать AmneziaVPN"),
p("В App Store в строке поиска набери ", b("AmneziaVPN"), " → «Загрузить»."),
h4("Шаг 5. Вернуть свой обычный Apple ID (рекомендую)"),
p("Повтори Шаг 1, но в конце войди под своим прежним ID. Приложение останется, обновления будут от меня."),
hr(),
h3("💻 Если у тебя компьютер (Windows / Mac)"),
p("Apple ID не нужен."),
tag("ol", [
tag("li", ["Скачай AmneziaVPN: ", a("github.com/amnezia-vpn/amnezia-client/releases/latest",
"https://github.com/amnezia-vpn/amnezia-client/releases/latest"),
". Windows — файл ", code("AmneziaVPN_x64_*.exe"), ", Mac — ", code("AmneziaVPN.dmg"), "."]),
tag("li", ["Установи, открой."]),
tag("li", ["Скопируй ключ VPN снизу этой страницы."]),
tag("li", ["В программе: ", b("«+»"), "", b("«Вставить из буфера обмена»"), "."]),
tag("li", ["Нажми большую кнопку включения."]),
]),
h3("🤖 Если у тебя Android"),
p("Apple ID не нужен."),
tag("ol", [
tag("li", ["Открой Google Play, найди ", b("AmneziaVPN"), ", установи. Если в Play нет — скачай APK: ",
a("github.com/amnezia-vpn/amnezia-client/releases/latest",
"https://github.com/amnezia-vpn/amnezia-client/releases/latest"), "."]),
tag("li", ["Скопируй ключ VPN снизу этой страницы."]),
tag("li", ["В AmneziaVPN: ", b("«+»"), "", b("«Вставить»"), "."]),
tag("li", ["Нажми большую кнопку включения."]),
]),
hr(),
h3("🔑 Подключить VPN (после установки)"),
tag("ol", [
tag("li", ["Скопируй ключ ", code("vpn://..."), " внизу этой страницы (тап по блоку с ключом)."]),
tag("li", ["Открой ", b("AmneziaVPN"), "."]),
tag("li", ["Нажми ", b("«+»"), " (или «Добавить сервер»)."]),
tag("li", [b("«Вставить из буфера обмена»"), " (англ. «Import from clipboard»)."]),
tag("li", ["Сервер добавится сам."]),
]),
h3("▶️ Включить"),
p("На главном экране AmneziaVPN — ", b("большая круглая кнопка"), ". Нажми."),
p("Всплывёт окошко ", b("«Разрешить подключения VPN»"), "", b("«Разрешить»"),
". Введи пароль от телефона если попросит."),
p("Кнопка станет ", b("зелёной"), " — VPN работает."),
h3("✅ Проверить"),
p("Открой в Safari ", a("2ip.ru", "https://2ip.ru"), ". Должна показаться ",
b("другая страна"), " (не Россия). Значит всё."),
hr(),
h3("📲 Поделиться с другим своим устройством"),
p("Не проси у меня — AmneziaVPN сам делится:"),
tag("ol", [
tag("li", ["В AmneziaVPN на рабочем устройстве нажми на сервер → иконка ", b("«i»"),
" / ", b("«Подробнее»"), "", b("«Поделиться подключением»"), "."]),
tag("li", ["Получишь ссылку → отправь себе в Telegram «Избранное» или на почту."]),
tag("li", ["На втором устройстве установи AmneziaVPN → скопируй ссылку → «+» → «Вставить»."]),
]),
hr(),
h3("🍏 Apple ID (США) — логин и пароль"),
p(i("Тапни по строке чтобы скопировать.")),
pre("hbuggle819@icloud.com"),
pre("App5870w"),
p("При входе — выбирай номер для кода ", b("на ...70"),
". Напиши мне когда Apple попросит код."),
hr(),
h3("🔐 Ключ VPN"),
p(i("Тапни по блоку ниже → «Копировать». Потом в AmneziaVPN «+» → «Вставить из буфера обмена».")),
pre(VPN_KEY),
hr(),
h3("❓ Если что-то идёт не так"),
tag("ul", [
tag("li", [b("Не пришёл код от Apple"), " — напиши, перевышлю."]),
tag("li", [b("Кнопка не зелёная, пишет «ошибка»"),
" — закрой приложение (свайпни вверх), открой снова. Не помогло — перезагрузи телефон."]),
tag("li", [b("Android, VPN отваливается"),
" — «Настройки телефона → Приложения → AmneziaVPN → Батарея → Без ограничений»."]),
tag("li", [b("iPhone «Профиль VPN не найден»"),
" — «Настройки → Основные → VPN и управление устройством». Если профиль AmneziaVPN там есть, удали его, вернись в AmneziaVPN и снова нажми «+» → «Вставить»."]),
]),
p("Совсем не получается — скинь мне скриншот того что видишь, разберёмся вместе."),
]
data = urllib.parse.urlencode({
"access_token": ACCESS_TOKEN,
"title": "Настройка VPN",
"author_name": "Олег",
"content": json.dumps(content, ensure_ascii=False),
"return_content": "false",
}).encode()
req = urllib.request.Request("https://api.telegra.ph/createPage", data=data)
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read().decode())
print(json.dumps(result, ensure_ascii=False, indent=2))