Кодировка в API

xx_kid_xx

Пользователь
Регистрация
12.05.2016
Сообщения
124
Благодарностей
4
Баллы
18
Всем привет!

Помогите, пожалуйста, с такой ситуацией: есть один форум, у которого есть API. При попытке через API запрос ( https://2ch.hk/makaba/mobile.fcgi?task=get_thread&board=test&thread=22222&post=1014 ) получить содержимое вот этого поста: https://2ch.hk/test/res/22222.html#169548 я получаю следующее

JSON:
[{"banned":0,"closed":0,"comment":"\u003ca href=\"/test/res/22222.html#165140\" class=\"post-reply-link\" data-thread=\"22222\" data-num=\"165140\"\u003e\u003e\u003e165140\u003c/a\u003e\u003cbr\u003e\u003cstrong\u003eтест\u003c/strong\u003e\u003cbr\u003e\u003cem\u003eтест\u003c/em\u003e\u003cbr\u003e\u003cspan class=\"unkfunc\"\u003e>тест\u003c/span\u003e\u003cbr\u003e\u003cspan class=\"u\"\u003eтест\u003c/span\u003e\u003cbr\u003e\u003cspan class=\"u\"\u003eтест\u003c/span\u003e\u003cbr\u003e\u003cspan class=\"o\"\u003eтест\u003c/span\u003e\u003cbr\u003e\u003cspan class=\"spoiler\"\u003eтест\u003c/span\u003e\u003cbr\u003e\u003cspan class=\"s\"\u003eтест\u003c/span\u003e\u003cbr\u003e\u003csup\u003eтест\u003c/sup\u003e\u003cbr\u003e\u003csub\u003eтест\u003c/sub\u003e","date":"13/11/20 Птн 15:11:37","dislikes":0,"email":"","endless":0,"files":[],"lasthit":1553366494,"likes":0,"name":"Аноним","num":"169548","op":0,"parent":"22222","sticky":0,"subject":"","timestamp":1605269497,"trip":"","trip_type":"normal","unique_posters":"624"}]
При перемещении в таблицу, он получает более читабельный вид

JSON:
<a href="/test/res/22222.html#165140" class="post-reply-link" data-thread="22222" data-num="165140">>>165140</a><br><strong>тест</strong><br><em>тест</em><br><span class="unkfunc">&gt;тест</span><br><span class="u">тест</span><br><span class="u">тест</span><br><span class="o">тест</span><br><span class="spoiler">тест</span><br><span class="s">тест</span><br><sup>тест</sup><br><sub>тест</sub>
Но некоторые символы так и остаются не в том виде, в каком должны быть. Например, &gt вместо символа >
Решается это использованием кубика замены, но хотел бы уточнить, может быть есть возможность как-то наверняка перекодировать полученный по API ответ так, чтобы избежать вот таких неперкодированных символов. А ещё лучше сразу без разметки, а просто текст как если бы я его копировал руками из браузера.
 

xx_kid_xx

Пользователь
Регистрация
12.05.2016
Сообщения
124
Благодарностей
4
Баллы
18
Получаю как минимум четыре символа в таком вот виде:

&lt; вместо <

&gt;
вместо >

&#47;
вместо /

&#92
; вместо \
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
ну глянь в кубике обработки текста, там много всяких вариантов. кодинг и декодинг тоже есть
 

xx_kid_xx

Пользователь
Регистрация
12.05.2016
Сообщения
124
Благодарностей
4
Баллы
18
ну глянь в кубике обработки текста, там много всяких вариантов. кодинг и декодинг тоже есть
Пробовал там все варианты, не подходят. Тот же кодинг и энкодинг подходит для передачи в самом URL запросе, как я понимаю. Я же делаю гет запрос и получаю ответ в json формате.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 816
Баллы
113
Я же делаю гет запрос и получаю ответ в json формате.
Для удобства работы с ответом API используйте экшен Обработка JSON/XML.
Вот что я получил в переменной проекта JSON, после парсинга:
67106


Далее, чтоб убрать вещи по типу &lt; &gt; &#47; &#92; можно воспользоваться C# функцией HtmlDecode. Для этого в Ссылки из GAC добавляете System.Web
67108

И потом в кубике Свой C# код (не забудьте в настройках указать переменную, в которую сохранится результат работы экшена):
C#:
return System.Web.HttpUtility.HtmlDecode(project.Json[0].comment);
Доставать текст уже придётся вручную. Можно с помощь регулярок и экшена Обработка текста.
 
  • Спасибо
Реакции: Bas и xx_kid_xx

xx_kid_xx

Пользователь
Регистрация
12.05.2016
Сообщения
124
Благодарностей
4
Баллы
18
Далее, чтоб убрать вещи по типу &lt; &gt; &#47; &#92; можно воспользоваться C# функцией HtmlDecode. Для этого в Ссылки из GAC добавляете System.Web
Большое спасибо! Это решило мою проблему.

И ещё вопрос, чтобы не создавать отдельную тему. У вас в имени переменных по одной вот такой конструкции [0], а у меня почему-то по две. Бывает, что получается, то одна, то две. Почему так происходит?

67229
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 785
Благодарностей
2 445
Баллы
113
Большое спасибо! Это решило мою проблему.

И ещё вопрос, чтобы не создавать отдельную тему. У вас в имени переменных по одной вот такой конструкции [0], а у меня почему-то по две. Бывает, что получается, то одна, то две. Почему так происходит?

Посмотреть вложение 67229
Чтобы понять разницу, необходимо понять что именно находится внутри и как создаются объекты.
Вот я привёл в данном случае два варианта с одними [] и с [][].
C#:
List<object[]> list_1 = new List<object[]>(); // создали список объектов

List<object> list_2 = new List<object>(); // создали ещё один список объектов
list_2.Add(new{ banned = true, closed = false, comment = "hello"}); // добавили объект в второй список
list_2.Add(new{ banned = true, closed = false, comment = "hi"});
list_2.Add(new{ banned = true, closed = false, comment = "world"});

list_1.Add(list_2.ToArray()); // забросили второй список объектов в первый

project.Json.FromString(Global.ZennoLab.Json.JsonConvert.SerializeObject(list_1)); // собрали в json
// смотрим переменные JSON в Зеннопостере
67230

C#:
List<object> list_2 = new List<object>(); // создали ещё один список объектов
list_2.Add(new{ banned = true, closed = false, comment = "hello"}); // добавили объект в второй список
list_2.Add(new{ banned = true, closed = false, comment = "hi"});
list_2.Add(new{ banned = true, closed = false, comment = "world"});

project.Json.FromString(Global.ZennoLab.Json.JsonConvert.SerializeObject(list_2)); // собрали в json
// смотрим переменные JSON в Зеннопостере
67231
 
  • Спасибо
Реакции: material и xx_kid_xx

xx_kid_xx

Пользователь
Регистрация
12.05.2016
Сообщения
124
Благодарностей
4
Баллы
18
Чтобы понять разницу, необходимо понять что именно находится внутри и как создаются объекты.
Вот я привёл в данном случае два варианта с одними [] и с [][].
Верно я понимаю, что в одном списке объектов получается, как бы, второй список объектов?

Я вот заметил, что у меня в экшоне "Парсинг JSON" стояла галочка "Обработать JsonPath", но там не было выражения. Когда галочку убрал, то список объектов стал формироваться с одним [].
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 421
Баллы
113
Вставлю свои 2 копейки. Это всего-навсего Unicode.
C#:
string json = project.Variables["get"].Value;
string comment = Regex.Match(json, @"(?<=""comment"":"").*?(?="",)").Value;
return Regex.Unescape(comment);
В частных случаях это может оказаться оправданнее. Например, когда объект слишком большой, а нам надо вынуть оттуда лишь одно значение.
 

Кто просматривает тему: (Всего: 4, Пользователи: 0, Гости: 4)