Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Герои Войны - микс стратегии и РПГ. Собери лучшую армию и победи всех врагов. В игре 7 различных режимов - как для любителей PvE, так и PvP.

Герои Войны

Стратегии, Мидкорные, Экшены

Играть

Топ прошлой недели

  • Rahlkan Rahlkan 1 пост
  • Tannhauser9 Tannhauser9 4 поста
  • alex.carrier alex.carrier 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
18
Boogernator
Boogernator
3 года назад
Лига Разработчиков Видеоигр

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц⁠⁠

Добрый вечер, мои дорогие подписчики. Сорян, я тут дичал, исполнял всякое, бухал и не только)
Осеннее обострение, что поделать. Впал было в лютую тоску, мыслишки не хорошие всякие посещали, это похоже из-за того, что начал к плюсам приобщаться. Ну блин зато теперь могу на голом Vulcan'е треугольник нарисовать)) Такое конечно достижение, морочить вам и себе голову этим пока не буду, ближе к выходу Godot4 уже скорее всего, главное путь наметился, для программиста графики можно сказать как Hello World. А так вообще морально готовился к серии постов, в которой сделать полноценную боевку аля Disciples. В целом простой прототип у меня уже готов, так что есть чего написать)

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

Вообщем конечно, ещё много чего надо разобрать для себя. Хочу 2D юнитов в 3D окружении, трехмерный фаербол он, как не крути смотрится круче чем двумерный. Ну и все одно тенюшки они всякие оставляют и тд. Но в 3D я полный нубас пока, ну хоть немножко подразобрался.
Я хотел пост запилить про MeshLibrary, но там никакого кода нету, а с анимашками делал пост, оно не надо никому, как я понял.

Но сегодня не будет никаких эффектов и тд. Я честно говоря запарился без конца для всяких тестов, прототипов и подобного придумывать и записывать хп да урон монстрам, да и надо мне уже завести все таблицы. А так же человек меня спросил, какой бэкграунд нужен, чтобы врываться геймдизайнером. Сходу у меня один ответ, надо перфектное знание Google Sheets или Excel, как минимум стремиться к нему. Ну и сразу мысль, а вот я то дурак вечно свои велосипеды горожу, даже начал свой велосипед изобретать, для редактирования JSON'ов на Godot хотел сделать. Сам советую и сам себя не слушаю, Братан то у меня такие таблички рисует и с графиками и с формулами, залюбуешься, не даром ведущий ГД уже лет 8) Ну и тоже захотелось, а заодно вечер посидел, по мануалам + Google, слепил кривой вариант)).

https://developers.google.com/apps-script/quickstart/custom-...
http://blog.pamelafox.org/2013/06/exporting-google-spreadshe...
вот тут много полезного подчерпнул, но её скрипт у меня не работает, я все выпилил и оставил только самый необходимый рабочий минимум. Ну и хотелось чтобы скриншотиком на один экран все влезло, много кода это зло)

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

Табличку можете заполнять как вам угодно, сверху наименование ключей будут, ну внизу понятно значения идут в ячейках. После того как кликнули редактор скриптов, вылезет следующее окошко, оно будет пустым, там только файл с расширением .gs будет.

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

Криво, косо, в целом чего тут объяснять, кто с JS или с AS3 сталкивался, проблем вообще не должно возникнуть, все очень простенько так-то. Разве что написано некрасиво, ну это косяк мой уже да. Я тут не про красоту, а про результат, главное что работает пример и можно пользоваться. KISS во всей его красе)

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

По нажатию будет такая картина

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

Ну и минимально необходимая вариативность.

Godot Путь Новичка. Экспорт в JSON из гуглтаблиц Godot Engine, Json, Gamedev, Секретные разработки, Депрессия, Javascript, Длиннопост

Сейчас чтобы добавить и экспортировать новую таблицу, надо будет ручками дать ей имя и в скрипте тоже его прописать. Ну и никакой защиты от дураков тоже ещё пока не делал и не тестил, может где и на чем сломается, так что заполнять надо корректно. В файл тоже пока экспорта нету. Это все на перспективу.


На вопрос, а чего не установил какое-нибудь расширение, честно я немножко не доверяю тому что там может быть, а они все столько разрешений просят. Вдруг у меня будет суперсекретная таблица с очень важными данными. Ну и во-вторых честно говоря, было очень даже интересно покопаться и разобраться немножко. В перспективе скорее всего доработаю, чтобы было удобнее пользоваться, но это уже скорее чтобы из приложения напрямую можно было к таблице обращаться. Ладно там видно будет.

Сейчас не буду обещать, что скоро будет пост или, что вот ещё писечку доделаю и будет очень прикольный трехмерный фаербол с сочным шейдером и партиклами. Фаербол ещё не достаточно сочный, да и могу забухать снова) Так что будет по пошаговой боевке, а там как раз и пригодится красивый фаербол в конце)


Гитхаб я так и не завел.
https://docs.google.com/document/d/1HF_BPKNn982Khlcbb39lyc0i...
Так что в гуглдок кину, вдруг пригодится кому.
Спасибо за внимание.

Показать полностью 6
[моё] Godot Engine Json Gamedev Секретные разработки Депрессия Javascript Длиннопост
8
6642
DELETED
3 года назад
IT-юмор

Сталин и ИТ⁠⁠

Сталин и ИТ
Сталин IT Программирование X (Twitter) Json Юмор IT юмор
126
87
Wiederholen
Wiederholen
3 года назад
IT-юмор

Православный json rpc⁠⁠

Знаете почему JSON RPC православен? Потому что он требует соблюдать POST

(Стянуто с рабочего чата)

IT юмор Json Rpc Текст
4
31
FabLabCFU
4 года назад
Arduino & Pi

Прошивка для платы управления двигателем RMD-X8 Pro⁠⁠

В рамках создания комплекса экзокисти под управлением нейрокомпьютерного интерфейса написал прошивку для Arduino Mega, которая через CAN-контроллер управляет серводвигателем RMD-X8 Pro, приводящим в движение механизм экзокисти. Модель экзокисти создавали наши студенты, прошивка представляла собой скетч, вырезанный из другого проекта, двигатель мог управляться только с помощью джойстика. Причем джойстик при движении вперед раскручивал двигатель вперед, а при отклонении джойстика в обратную сторону постепенно останавливал его и начинал неконтролируемые движение в обратном направлении. При остановке джойстика движение также не прекращалось. Контроля углов вращения не было.

Прошивка для платы управления двигателем RMD-X8 Pro Arduino, Json, Сервопривод, Прошивка, Экзоскелет, Программирование, Вертикальное видео, Видео, Длиннопост

Особенность этого двигателя в том, что при вращении вала двигателя на 360 градусов редуктор примерно в четыре раза уменьшает угол поворота, а энкодер двигателя контролирует вращение только на 360 градусов по валу двигателя, что фактически является только четвертью полного оборота. При прохождении отметки в 360 градусов энкодер сбрасывался в ноль и считал данные заново.


Для двигателя есть настроечная программа, которая работает по протоколу serial-232, имеются варианты интерфейса двигателей с RS485 у которого больше возможностей, чем у CAN, который через один датафрейм может передать максимум 8 байт. В тестовой вкладке программы настройки примеры интерфейса управлением двигателя работают не так, как хотелось бы, но зато оказалось, что там есть команды, не описанные в документации. При использовании тестовых режимов программа указывает, какие данные она пересылает в датафрейме, и стало видно, что кроме команд позиционирования А1-А6 также используются команды А7 и А8, и последняя команда как раз подошла для нашей задачи.

Сейчас прошивка реализована следующим образом: от джойстика или от внешней управляющей программы (в итоге это будет нейрокомпьютерный интерфейс) приходит команда, что нужно выставить угол экзокисти в заданное значение. Прошивка определяет текущее положение двигателя, если угол больше, то подается команда на движение в обратную сторону, положение кисти постоянно контролируется.

Энкодер двигателя очень чувствительный – он позволяет позиционировать двигатель с точностью до сотых долей градуса. При команде на остановку двигатель по инерции проходит еще несколько сотых градуса, и без усреднения данных положения энкодер постоянно пытался бы вернуть двигатель точно в заданное положение, опять бы проскакивал его по инерции и т.д., что вызывало бы постоянное дерганье. Усреднил показания позиции, разделил их на 100 и отбросил дробную часть, чтобы сравнивались только целые градусы углов, поскольку точность в 1 градус вполне достаточна, а лишних дерганий удается избежать.


Добавил в прошивку подстраховку, что в случае неисполнения двигателем команды на остановку она будет посылаться снова и снова, пока двигатель не остановится. Кроме того, есть команда на аварийное отключение двигателя, если что-то идет не так.

Также добавил в прошивку работу с внешними интерфейсами через последовательный порт в формате JSON, через которые прошивка будет получать команды от внешней управляющей программы. На Java написана ретранслирующая программа, которая принимает пакеты по протоколу UDP, пересылает их в Ардуино по serial, с последовательного же порта получает ответ от платы и пересылает его обратно в управляющую программу высокого уровня по UDP. Это необходимо для обратной совместимости со сторонним программным обеспечением.

Показать полностью 1 1
[моё] Arduino Json Сервопривод Прошивка Экзоскелет Программирование Вертикальное видео Видео Длиннопост
18
66
BHD2R
BHD2R
4 года назад
Web-технологии

Как без пиратства и покупки платного ПО пользоваться макетами Adobe XD⁠⁠

Формат файла Adobe XD представляет из себя архив, который содержит описание структуры макеты в виде JSON структуры, графических растровых и векторных файлов использованных при создании макета.


Стандартный метод — открыть в программе Adobe XD — нужна программа купленная за деньги (подписка).

Использовать сервис-конвертор XD2SKETCH.COM — за деньги (подписка или платное разовое использование).

Программу-сервис Avocode — за деньги.
Кроме того, некоторые программы работают только в среде Mac OS (Sketch - только MAC OS или веб-приложение)

И тому подобное.


Чтобы открыть макет Adobe XD бесплатно, можно воспользоваться бесплатной программой-сервисом Photopea — в этом случае видны все параметры объектов макета и даже доступ к CSS значениям реализован удобнее чем в Photoshop. А вот реализация извлечения растровых объектов из макета, для внедрения в вёрстку, немного подкачала, на мой вкус.


Чтобы получить объекты из файла Adobe XD, достаточно открыть его как Zip-архив, например с помощью архиватора 7-Zip. В результате получим несколько папок с ресурсами JSON, XML, и папкой с растровыми объектами: «resources».


Содержащиеся там файлы будут без расширений, но это решается просто переименованием, с добавлением соответствующего расширения. Если есть сомнения в том, какое расширение необходимо, достаточно открыть файл в программе Notepad++ или в другом тактовом редакторе. У файлов формата PNG в первой же строчке будет «‰PNG». У SVG-файлов будет так же видна вся XML структура присущая SVG-файлам.


Итого, файл макета открыт в Photopea — данные CSS доступны для переноса. Папочка с графикой для вставки в вёрстку — готова.

Кроме того, из Photopea можно сохранить в PSD, который открывается некоторыми бесплатными просмотровщиками и редакторами.

Возможно, подход не оригинальный. Но уж чем богаты.

Вероятно есть и более простые методы.

Показать полностью
[моё] Верстка Веб-дизайн Adobe XD Png Json Xml 7-zip CSS Mac Os Текст
24
1423
OnlyDarkAngel
OnlyDarkAngel
4 года назад
IT-юмор

Ошибка выполнения. Сообщите администратору⁠⁠

Ошибка выполнения. Сообщите администратору IT, API, Json, IT юмор, Картинка с текстом, Юмор

Стянуто с телеги.

Показать полностью 1
IT API Json IT юмор Картинка с текстом Юмор
42
58
tmax
4 года назад

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения⁠⁠

Первая часть: Сказ о том, как Рыцарь свежего смог достучаться до самого сердечка ИЛИ ищем API Пикабу

Предыдущая часть: Ищем API Пикабу. Часть 1.5. Интермедия

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

Жил-был маленький Программист, который смог. И вот однажды в глубине интернета он переходил на вражеские сайты — клик-клик-клик-клик, клик-клик-клик-клик, бляяять-бляяять! Программисту был дан приказ найти инструменты для распаковки APK и скачать их на компьютер, который оборонял Windows Defender. Надо ли говорить, что вирусов кругом была тьма тьмущая. Думаешь, это остановило Программиста, который Смог? Да черта с два! Он гуглил себе и гуглил — клик-клик-клик-клик, клик-клик-клик-клик, бляяять-бляяять! Даже когда он скидывал скриншоты местного GUI на Java знакомым Qt-девелоперам и они задыхались от увиденного. У тех из глаз кровища течет вперемешку с соплями. Но, думаешь, это остановило Программиста? Правильно! Он так и гуглил дальше — клик-клик-клик-клик, клик-клик-клик-клик, бляяять-бляяять!

И всё бы ничего… Да гуки выложили на сайте два плагина для IDE. И как раз когда Программист установил его и начал исследовать код — БААМ!!! Не декомпилировалось! Кругом программное месиво, ассемблерный листинг повсюду разбросан, и тут откуда-то выползает мой друг-фронтэндщик Буба в Slack. Ему больно! Но он пишет мне:

— tmax! Я UI/UX не чувствую…

А я ему:

— Буба, у них его нет!

Гляжу, а культи у него дергаются быстро-быстро, вот так! Я говорю:

— Буба! До ближайшего code review 30 недель. Если не можешь позвонить и наорать на них матом, значит нам пизда!

И тут вдруг отовсюду ответные задачи как повыскакивают, а у меня из IDE один блокнот. Но делать то нечего… Надо прорываться! Ааааааааааааааааааааааааааааааааааааааааааааааааааааа!!!!!!!!!

Pull, падла, pull! Мидл tmax живым не сдается! Commit, это тебе за моего друга! Commit! Commit!

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

Предыдущая мажорная часть закончилась на том, что были перехвачены пакеты между приложением Пикабу на Android и серверами Пикабу. В минорной версии я рассмотрел плюсы и минусы разных способов распарсить содержимое страниц, и остановился на приватном API приложения Пикабу.

В каждом JSON запросе (по крайней мере в тех, которыми грузятся посты) всегда используется четыре ключа - id, hash, token, и new_sort. id всегда равен "iws". Существует несколько аббревиатур, не знаю, что именно означает эта, но сейчас это и не важно. Главное, что она не меняется и она едина для всех запросов. token - это время формирования запроса в миллисекундах, записанное в строку. new_sort всегда равен 1, это похоже на баг, пока я не вижу смысла включать этот ключ в каждый формируемый запрос, но он есть и придётся с этим смириться. Остается только hash, значение которого является закодированным base64 MD5 хешем, например "NWQ2MDRjYmMxY2FhZjNlYmE0MmU4NjA1ZTgzM2Q1NDM=". Да, это спойлер, доказательства будут приведены в конце статьи.

Дальше надо определить, как формируются входные данные для вычисления хеша. Простые комбинации имеющихся в запросе данных к результату не привели, придется реверсить приложение и искать алгоритм формирования исходных данных. Если что, то я вообще не умею в Android, но имею небольшой опыт обратной разработки и анализа приложений, собранных с помощью C/С++ с использованием IDA Pro. Так как IDA является именно интерактивным дизассемблером (Interactive Disassember), то я бы хотел получить исходники в любом виде, при условии, что у меня будет возможность переименовывать функции, переменные, параметры функций, конструкторы, классы и оставлять комментарии. Ну, собственно, не очень много требований, правда?

Хуй там плавал. Спойлер - я не нашел ни одной полноценной утилиты, которая покрыла бы все мои потребности на 100%. Но пиздеть - не мешки ворочать, поехали разбираться. Что делает программист, когда ныряет в свежее неизвестную область? Правильно, идет яростно гуглить, гуглить вдвойне - за ноябрь и за декабрь.

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

(С учетом вышеприведенной ссылки, данный мем выглядит чуть-чуть по-другому. Одобрям-с)

Немного расскажу про APKTool, которым я перепаковывал APK. Да, эта маленькая утилитка полностью декомпилировала APK и позволила собрать его назад. Однако, весь код приложения, который хранится в .dex файлах в виде инструкций для виртуальной машины Dalvik, она преобразовала в формат smali – это те же самые инструкции, только в текстовом виде ибо smali – местный ассемблер. Ассемблерный листинг - это пиздец, товарищи. Нет, он, разумеется, ощутимо проще ассемблера x86/x86_64, но использовать его для какого-либо продвинутого анализа могут только отцы. У меня на это нет ни времени, ни желания, хотя в конце первой статьи я написал, что надо в нем разобраться. Оказалось, что один из способов пропатчить код приложения - это ручками писать на smali, а затем результат упаковывать назад. Лучше, чем байткод напрямую править (а байткод - это единственный способ патчить native приложения/библиотеки). Пока разбирался, то нагуглил Java Decompiler и понеслась душа в рай. Вместо этой статьи должен был выйти туториал по анализу на основе smali, но ну его на хер, есть же гораздо более читаемый Java :> Правда, анализ пока немного не согласован с начальством, да и вообще, сабж вызвал горение жопы, так что я обязан вам все рассказать. Что вы там кричите с галёрки? Есть еще способы? Frida? Meh, оставьте себе эту хипстерскую дрянь перспективную штучку (я нашёл её много позже и не пробовал).

_____________________________

Вот в этом месте раньше начинался подробный разбор всех утилит, что я перекачал/пересобрал/перепробовал. Я рассмотрел примерно 2/3 заготовленных программ и за каким-то хуем решил прогуглить, вдруг, на Пикабу уже был подобный разбор приложений. И знаете, что? Правильно, я наткнулся на статью на Дзене и вбил в гугл одно рандомное предложение из той статьи.

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

А я-то такой, весь из себя в Дольче и Габбане, ковырял англоязычные статьи, думал «какой же я сейчас охуенный контент подвезу, почти подробный разбор найденного мной ПО для декомпиляции на русском». Пиздец (лиса продолжает игнорировать слово "пиздец" и предлагает заменить его на "эпизодец". В этом что-то есть...). Выделенная статья на скриншоте является исходником и доступна в вебархиве. Она датируется 05.2016, потом её спиздили на imhacker, потом на bhf и только потом этот дремучий баян-бабаян три года спустя оказался на Дзене. С минимальными изменениями и ссылками на файлы в сети TOR, где она и родилась, лол. И что теперь, предлагаете моё изложение написать сюда? Чем этот пост лучше? Ничем, увы. Всё ПО, что я попробовал, так или иначе встречается там. Более того, в статье упоминается другой декомпилятор dex, enjarify. Я с ним не сталкивался, но проверю его за кадром. Если он окажется лучше, заберу себе вместо dex2jar. Фана ради стоит заметить, что последние правки dex2jar свежее, чем у enjarify, хотя в той статье ситуация как раз наоборот, надо протестировать. Вот так я словил дизмораль и к хуям снёс всё, что касалось разбора приложений.

_____________________________

Что дальше? Я нашел две рабочие конфигурации. Первая:

- консольная jadx, которая сразу выплёвывает .java, но делает это не на все 100%;

- Eclipse. Нахуй-нахуй-нахуй, тьфу блять. Хватит ебать труп, оставьте его! Бох накажэт, накааажэт!

- IntelliJ IDEA. IDE богов с нормально работающим рефакторингом с возможностью вести разработку Android приложений.


Вторая конфигурация:

- 7-zip, чтобы вытащить .dex файлы;

- dex2jar, чтобы из .dex файлов получить .jar-архивы с .сlass;

- Опять 7-zip, чтобы объединить полученные .jar-архивы в один, ибо декомпилятор должен работать сразу со всеми .class файлами, чтобы не возникало проблем с вызовом отсутствующих функций вследствие независимой обработки одного .jar за раз (я на эту проблему не наткнулся, так как сразу начал упаковывать в один файл по этой надуманной причине);

- fernflower, декомпилятор, поддерживаемый Jet Brains и встроенный в IntelliJ IDEA, но который можно скачать и собрать отдельно, чтобы была возможность запускать на пачке файлов (IDE позволяет работать только с одним файлом за раз в режиме read-only). Преобразует .jar с .class-ами на борту в .jar с .java;

- IntelliJ IDEA.

Первая конфигурация лайтовая, но jadx умеет читать метаданные Kotlin (кот с лампой, гы), что в случае нашего приложения дает такой нехуёвый результат в виде большого числа декодированных имен классов. Вторая же конфигурация длиннее, сложнее и требует сборки fernflower вручную (которая без костылей не обошлась, блять), но дает более качественный код, декомпилируя те методы, которые не взял jadx.

Ну и, собственно, пара скриншотов, чтобы вы не думали, что я пиздобол. Вытащенные из .apk .dex-файлы + полученные из них .jar-архивы. combined.jar содержит в себе все содержимое из прочих .jar-архивов.

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

Параметры для запуска fernflower, которые я использовал на combined.jar (да, компилятор зависал на каких-то функциях, я ему урезал время обработки до 30 секунд):

java -jar fernflower.jar -dgs=1 -mpm=30 -ren=1 combined.jar fernflower_out

Ну и скриншот функции, в которой собирается запрос (уже отрефакторенный):

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

А еще я оказался прав. Хеш считается как MD5 + base64:

Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост
Ищем API Пикабу. Часть 2. Подбор инструментария для исследования кода приложения Пикабу, Приложение, Json, Шифрование, Мат, Java, APK, Длиннопост

На момент написания вот ЭТОГО слова я полностью знаю, как формировать структуру данных для алгоритма хеширования. Только что я удалил ту часть статьи, о которой упоминал выше, время было потрачено впустую на никому не нужный анализ ПО, горящая жопа была потушена дизморалью (рекомендую), настроение ниже плинтуса.

Благодарю за внимание, знаю, что читать длиннопосты сложно. Я стараюсь сжимать инфу. Чуточку доброты не помешает никому.

Показать полностью 8
[моё] Пикабу Приложение Json Шифрование Мат Java APK Длиннопост
67
34
tmax
4 года назад

Ищем API Пикабу. Часть 1.5. Интермедия⁠⁠

Предыдущая часть: Сказ о том, как Рыцарь свежего смог достучаться до самого сердечка ИЛИ ищем API Пикабу

Сразу хочу поблагодарить комментаторов в предыдущем посте за проявленный к теме интерес, за вопросы и за предложения. Ознакомившись с комментариями (целых 14 штук, чуть не надорвался!), я решил написать этот промежуточный пост и разобрать альтернативные пути дальнейших действий.


Итак, прошлый пост закончился на том, что я успешно перехватил трафик с приложения Пикабу для Android, увидел волшебную ссылку https://api.pikabu.ru/v1 и определил, что обмен данными производится по JSON (логично). Но пикабушники не были бы пикабушниками, если бы обошлись без подколов в комментах. Люблю вас, честно.


Проблема в том, что в обнаруженном API мог оказаться вообще любой формат - JSON, XML, YAML или, прости хоспаде, голый HTML. И я покажу HTML внутри ответа от сервера в формате JSON чуть далее. Морально я был готов увидеть в протоколе вообще всё, что угодно, но это оказался JSON, чему я был несказанно рад, так как лично мне с ним работать много проще, чем с тем же XML, да и читать его в сыром виде приятнее, чего греха таить. В качестве особого извращения, можно возвращать результат в виде base64(zlib(protobuf())). Упаковка и распаковка ляжет целиком на плечи серверов и клиентов, зато, с высокой долей вероятности, будут пересылаться меньшие пакеты данных, что актуально для спутникового интернета где-нибудь у черта на куличиках.

Ладно, не буду превращать пост в ответы на комментарии, я только один раз, всего лишь на пол шишечки <3

В комментариях пользователи также предложили еще два способа получить данные с сайта для последующей обработки. Рассмотрю их в порядке возрастания интереса лично для меня.

На данный момент, самый горячий пост - Оскорбил. Его и буду препарировать. Погнали.

@krot2

А что помешало в хроме переключить на мобильную версию и открыть devtools

Справедливое замечание. Но мне это даже в голову не пришло. Наверняка, это была заводская блокировка, чтобы я не заморачивался всякими анализами HTML. У меня Firefox, поэтому выполню аналогичные действия. Тут это называется "Адаптивный дизайн".

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Вероятно, так выглядит Пикабу на iPhone X/XS. Не знаю, не хочу проверять в живую. Открываю devtools (они же инструменты разработчка на F12) и первое, что я вижу - разметка страницы.  Допустим. Ищу текст статьи, вот он:

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Чтобы до него добраться надо, как я понимаю, найти блок div с классом(-ами?) "story-block story-block_type_text". Но не пинайте строго, я в вебе не особо разбираюсь и сайты ранее не парсил, умею только читать (глазами и головой) разные штуки и анализировать прочитанное. Как по мне, такое название класса не выглядит чем-то фундаментально неизменяемым, но кто его знает, на самом деле. Могу ошибаться, но это, вроде, ссылка на таблицу стилей. Получается, если стилисты поменяют название класса, то парсер посыпется. Неприятно. Однако, хочу заметить, что посыпется любая программа, заточенная под специфическую строку, даже в случае JSON.

Итог - требуется парсер HTML. Конкретно эта страничка весит ~404 кб (для проверки размера я сохранил .html файл на диск и посмотрел его размер). Пока не знаю, много это или мало, разберемся чуть позже.

@gosnorkocontrol

не проще ходить парсером по https://zalipaka.icu/new?twitmode=1&of=v2&page=1 и т.д.? там html в data - простетский, все посты удобно разбиты на обьекты.

Та-а-ак, а это уже интересно. Давай попробуем: Оскорбил

{"result":false,"message":"Krasavchik"}

Спасибо, товарищ программист бэкэнда, стараемся! Жаль, что не удалось договориться :) Ответ пришел, тем временем, в JSON. С конкретным постом не прокатило, надо попробовать в общей ленте: https://zalipaka.icu/?twitmode=1&of=v2

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост
Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Есть ответ! В JSON! Похоже, загрузилась какая-то часть из 7006 постов в горячем. Есть какая-то реклама (ключ ads), есть какие-то stories (aka посты), поглядим...

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост
Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Спасибо, Киану. Ты очень точно передал моё выражение лица. Продолжим... Ключ "html", да и содержимое со всякими там div-ами. Да, похоже на правду. Вот только множество переносов строк (\n) и табуляций (\t) напрягает. Ладно, надо найти какой-нибудь html beautifier, чтобы посмотреть на это дело в нормальном виде.

Как обычно, искать лень, а на первом попавшемся сайте по выравниванию HTML эскейп-символы не убираются. Но я же программист C++, я знаю аж 2 способа, как от них избавиться. Их можно заменить в каком-нибудь Notepad++ на пустой символ или просто напечатать все содержимое в программе С++. Программисты С++ не всегда ищут простые пути. Зачастую, лучший путь тот, что занимает меньше кликов :)

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Хорошо, но можно сделать еще лучше.

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Во, в самый раз. И что же я теперь вижу? То же название класса в теге div, то же содержимое. Дальше углубляться не вижу смысла.

Сразу виден минус этого подхода - предоставленные мне ключи запроса не подошли для получения данных конкретного поста, а было бы хорошо грузить только конкретные посты, а не всю пачку целиком. И еще возникает вопрос о способе получения "среза" постов за определенный период. Думаю, способа запросить у сервера список допустимых ключей для запроса нет, ну да ладно. Требуется два инструмента - парсер для JSON и парсер HTML. Размер - ~156 кб, но это не один пост, а целая пачка с главной страницы. Требование двух инструментов не является таким критичным, как невозможность использовать этот способ при загрузке конкретно одного поста.

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

Третий способ - воспользоваться API мобильного приложения. Поехали.

Я буду пользоваться всё тем же mitmproxy и эмулятором с установленным пропатченным приложением Пикабу, хотя и ознакомлюсь с питоновскими библиотеками, предложенными в комментариях, чуть позже. Открываю через приложение страничку горячего. Запрос:

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Щьёрт побьери! Пока писал пост, горячее обновилось и сравнить размеры не получится. Вижу номер запроса страницы. Хорошо. Ответ:

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

Содержимое ответа скрыто, поэтому предлагаю поверить мне на слово, что там JSON :) Никакой пользы этот скриншот, кроме размера в 241.9 кб в рамках текущего разбора не несет, но почему бы и нет? Интернет не казенный, так что расчехляйте свои байты, гулять так гулять! А, вы уже?...

Но теперь-то появилась возможность проверить страничку тестового поста! Ищу пост по имени пользователя за последние сутки, нахожу и открываю его. Приложение генерирует следующий запрос:

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

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

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост

story_data - список блоков поста, в нашем случае, один блок типа "t" (text), но который содержит какие-то теги HTML. Вполне возможно, тут же будет присутствовать и форматирование, и ссылки, но с этим буду разбираться потом. Также, тут присутствует полный URL на пост. Я не знаю, возможно ли осуществлять переход по конкретным постам в десктопной/мобильной версии, имея на руках только номер поста, но тут есть полная ссылка, что, определенно, плюс. Хотя я бы возвращал только относительный путь к посту, независимо от домена, а сам домен настраивал в момент первого включения приложения или периодически возвращал бы его в процессе обновления ленты. Короче, я бы не стал отправлять его постоянно, только время от времени. Мало ли... Есть также информация о пользователе - его идентификатор в БД, ник и ссылка на профиль. Ну и был обнаружен интересный ключ sber_donation_url, но тут и так всё понятно :)


К этому моменту каждый уже мог сделать для себя выводы о плюсах и минусах, но для адептов ЛЛ я их все-таки сформулирую, я про вас помню, ребятки.

Плюсы - можно грузить что угодно, в каком угодно порядке и в любое время. Все эксперименты проводились на приложении без аккаунта :) Нужен один инструмент для работы с JSON. Данные приходят в подготовленном для обработки виде, удобнее не придумаешь. Размеры пакетов.... Ну хз, где-то может быть больше, где-то меньше. В готовой странице можно оставлять только необходимые для работы данные/ссылки, тут же прилетает куча дополнительной информации (количество плюсов и минусов для самостоятельного подсчета соотношения, например), многое дублируется. Я бы добавил в запрос еще ключ типа verbose, и если false - то присылать только то, что необходимо для отображения по минимуму, без комментариев. Короче, тут есть простор для воображения.

Минус я вижу только один - нужно исследовать алгоритм авторизации приложения и расколоть формат запросов (есть там один противный hash, пока не ясно, от чего он считается). К каждому запросу (кроме двух первых) прикрепляется два каких-то неопознанных идентификатора. Один из них - deviceuid, и вполне может оказаться, что он не просто сгенерирован на устройстве один раз. Есть подозрение, что придется изрядно помучаться, прежде чем получится эмулировать процесс получения данных по этому способу.

Для себя я сделал выбор - буду продолжать намеченный курс и исследовать приватный API приложения Пикабу. Мне он кажется наиболее гибким и наиболее простым в починке, в случае, если что-то поломается.

Это должен был быть маленький оффтоп-пост, я не хотел, честно! Благодарю за внимание, мне приятно, что вы проявляете интерес к моему творчеству. Будьте чуточку добрее, мы тоже люди.

Ищем API Пикабу. Часть 1.5. Интермедия API, Пикабу, Json, HTML, Длиннопост
Показать полностью 13
[моё] API Пикабу Json HTML Длиннопост
41
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии