Як одержати API ключ в Telegra.ph

Для можливості створення публікацій і розміщення їх на сервісі Telegra.ph необхідно перш за все одержати API key, який в подальшому використовувати для відправки кожного HTTP запиту. Втративши цей ключ в подальшому не получиться керувати публікацією, наприклад змінювати її чи видалити. Тому його потрібно надійно зберігати.

Для одержання API key для автентифікації запитів Telegra.ph потрібно відправити HTTP запит, сформувавши URL як описано в документації. При чому домени можуть бути різні, тому що сервіс має декілька зеркал (тобто доступний не декількох доменах одночасно). І хоча в інтернеті зустрічається багато зеркальних доменів сервіса Telegra.ph, виявляється, що створити API key мені получилось тільки на двух:

https://api.graph.org/createAccount?author_name=<name>&short_name=<login>
https://api.telegra.ph/createAccount?author_name=<name>&short_name=<login>

Тому, використовуючи будь-які інші можна поставити під сумнів, дійно вони є зеркалами Telegra.ph чи ні (адже вони можуть просто скачувати і демонструвати вже наявні публікації і не мати можливості для створення і редагування вже існуючих).

Звичайно по такому URL можна перейти в браузері, відправити запит використовуючи Postman чи cURL, проте мені для автоматизації зручніше користуватись програмою ZennoPoster.

В своєму коді я генерую параметри author_name і short_name.
Потім формую URL і відправляю HTTP запит методом GET.

// Добавити в GAS бібліотеку System.Net.Http.dll
string[] domains = new[]{
	"api.telegra.ph",
	"api.graph.org"
};
string endpoint = string.Format("https://{0}/createAccount",domains[0]);
//	   endpoint =string.Format("https://{0}/createAccount",domains[1]);

string short_name = project.Profile.RegenerateLogin("[Lat|4][RndNum|1970|1990]");
string author_name = project.Profile.RegenerateLogin("[Lat|4][RndNum|1970|1990]");
string proxy = string.Empty;

var url_params = new Dictionary<string, string>();
    url_params.Add("short_name",short_name );
    url_params.Add("author_name",author_name); 
var url_params_data = new System.Net.Http.FormUrlEncodedContent(url_params.OrderBy(x=>x.Key));
string query = url_params_data.ReadAsStringAsync().Result;
string url = string.Join("?", new[]{endpoint,query});
string encoding =Encoding.UTF8.WebName;
var type = ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly;
var method = ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET;
string cookie = string.Empty;
string UserAgent = project.Profile.UserAgent;
string [] headers =  new[]{"API: KEY"};
var CookieContainer = project.Profile.CookieContainer;

string text = ZennoPoster.HTTP.Request(
	method: method, // метод яким буде відправлено запит
	url: url,// по якому адресу буде відправлено запит
	content: string.Empty, // які дані буде відправляти запит
	contentPostingType: string.Empty, // який тип контенту буде відправляти запит
	proxy: proxy, // з якого IP відправляти запит
	Encoding: encoding, // в якому кодуванні відправляти запит
	respType: type, // в якому вигляді повернути результат
	Timeout: 30000, // скільки часу очікувати результат
	Cookies: cookie, // використовувати додаткові cookie
	UserAgent: UserAgent, // використовувати вказаний UserAgent
	UseRedirect: false, // включити слідування переадресаціям
	MaxRedirectCount: 0, // слідувати php переадресаціям
	AdditionalHeaders: headers, // добавити заголовки до цього запиту
	DownloadPath: null, // шлях до папки для збереження результату
	UseOriginalUrl: true, // не змінювати параметри запиту
	throwExceptionOnError: true, // генерувати помилку якщо не одержали результат
	cookieContainer: CookieContainer, // використання контейнера для cookie
	removeDefaultHeaders: true // видалення стандартних заголовків
);

У змінну text буде поміщений результат, який поверне API у вигляді JSON:

{
  "ok": true,
  "result": {
    "short_name": "taceonami1985",
    "author_name": "quitodescon1981",
    "author_url": "",
    "access_token": "bfe12d0cad802c12c84aa9cf84697fec5fc8bec410f81cfda2c190ef3897",
    "auth_url": "https:\/\/edit.telegra.ph\/auth\/b3LYB894JfAkKvNeeDv56vDZ13ktHtgQw2P7OWaybI"
  }
}

Якщо JSON містить поле ok=true то можна десеріалізувати його в словник, і одержати необхідні значення полів access_token і auth_url, які потім можна вивести в лог ZennoPoster чи помістити в список, таблицю, чи внутрішні змінні проєкта ZennoPoster для подальшого використання у HTTP запитах на створення, зміну чи видалення існуючої публікації.

var dic = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(text);
if(bool.Parse(dic["ok"].ToString())) {
	string json = Global.ZennoLab.Json.JsonConvert.SerializeObject(dic["result"]);
	var item = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
	string key = item["access_token"];
	string link = item["auth_url"];
	project.SendInfoToLog(string.Join(Environment.NewLine, new[]{key, link}),true);
}

В результаті виконання коду в лог програми ZennoPoster відобразиться access_token, тобто токен доступу до сайту Telegra.ph від імені згенерованого мною користувача – це і є API key, який необхідний для автентифікації запитів до сервісу для створення і зміни публікацій.

Також в лог ZennoPoster буде поміщено посилання, яке можна використовувати для авторизації на сервісі Telegra.ph використовуючи браузер, наприклад Google Chrome. Це зручно тоді, коли немає необхідності автоматично створювати публікації.

2 коментаря до “Як одержати API ключ в Telegra.ph”

  1. Иосиф добрый день, хороший блог, поставил в закладки. Сделай пожалуйста поиск, недавно видел инфу о скриншоте , листать не удобно. Вижу ты информацию обновляешь почти каждый день

  2. Дякую, Дмитре!
    На жаль в мене не достатньо досвіду, щоб реалізувати такий функціонал.
    У випадку коли щось потрібно знайти на будь-якому сайті я використовую Google, приблизно так:
    site:blog.yosyfovych.te.ua скриншот

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *