Не могу опубликовать большие статьи на русском в telegraph через api. Что делать?
Основной вопрос описан в заголовке. Детали- Есть бот, который публикует статьи в телеграфе, конвертируя полученный от пользователя docx документ в Node с сохранением форматирования, адаптируя под telegra.ph. И всё вроде работает, когда всякие большие lorem ipsum загружаю, но когда такого же размера текст на русском, возвращается bad request. Я протестил это на c#:
string token = "my token";
HttpClient client = new();
string content =node.Serialize();//node-объект типа Node, создаю из вне
content = content.Replace(",\"attrs\":null",null);//пустые attrs удаляю из текста, чтобы лишний раз не отправлять лишней информации
string request = $"https://api.telegra.ph/createPage?access_token={token}&title=Lorem+ipsum2&content={content}";
var response=await client.GetAsync(request);
string rStr = await response.Content.ReadAsStringAsync();
и на python, но node я предварительно сериализовал через основной код в шарпе и закинул в файл:
import requests
f=open('D:\\Users\\Admin\\Рабочий стол\\doc.txt','r')
content=f.read()
f.close()
token='мой токен'
res=requests.get(f'https://api.telegra.ph/createPage?token={token}&content={content}&title=MyTitle')
print(res)
И использую везде get-запрос вместо post, т.к по-другому не работает, хоть и в документации (https://telegra.ph/api) указано обратное:
var content = domToNode(article).children;
$.ajax('https://api.telegra.ph/createPage', {
data: {
access_token: '%access_token%',
title: 'Title of page',
content: JSON.stringify(content),
return_content: true
},
type: 'POST',
dataType: 'json'
Я подумал, что закинув все аргументы в тело запроса, заработает, но, как оказалось, нет. Ведёт себя так, будто бы я ему передавал бы GET https://api.telegra.ph/createPage и требует access_token, а не POST. Похоже, что это связано с тем, что русские символы представлены не одним, а несколькими при передачи в url и поэтому размер такого "текста" превышает 64 кб, что описано как максимальный размер передаваемой статьи в документации. Моё предположение. Тем не менее, ребят, что делать с публикацией на русском? Скажите пожалуйста, всю голову сломал. Есть какие-нибудь обходные пути?
Ответы (1 шт):
Всем шарпистам сообщаю, что всё-таки через POST апи телеграфа работает, но! Нужно указывать тип контента непосредственно после инициализации контента и запроса. Короче, вот рабочий код:
dynamic info = new
{
title = "My post",
content = content,
access_token =token
};
string requestPath = $"https://api.telegra.ph/createPage";
string serialized = JsonConvert.SerializeObject(info);
//обязательно укажите кодировку utf-8
StringContent webContent = new StringContent(serialized,Encoding.UTF8);
HttpRequestMessage request = new(HttpMethod.Post, requestPath) { Content=webContent};
request.Content.Headers.ContentType=new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
var response=await client.SendAsync(request);
string responseStr = await response.Content.ReadAsStringAsync();//и делайте с этой переменной что хотите