Автор |
Сообщение |
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
Имеется ли для трекера публичный api для работы с трекером? Вчера стала задача перекачать все торрент файлы своих активных раздач. Пришлось это все через парсинг html страниц делать, что во-первых не сильно очень не удобно, а во-вторых долго, а в-третьих, возможно, создаёт избыточную нагрузку на сервер (мини DDoS ). Вот и возник вопрос, а есть ли более простые средства для решения подобных задач? Например, получить список своих активных раздач или результат поиска по трекеру в каком нибудь более презентабельном виде (json, xml, и т.д.)? P.S. Есть домен api.nnm-club.ws, только не понятно, что это и для чего. Никакой информации как им пользоваться и можно ли им пользоваться не нашел... P.S.S. Можно ли как-нибудь осуществлять поиск раздачи по хэшу из magnet-link? |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
google
Стаж: 14 лет 2 мес.
Сообщений: 254
Ratio: 30.184
100%
|
API, действительно, имеется, но пока что непубличный, и точка входа в него — https://api.nnm-club.ws/Ручку для получения активных раздач и поиска по хешу сделаю, раз есть такая потребность. Пока могу предложить разобраться с авторизацией, она довольно необычно сделана. Используется протокол SRP-6a, пример реализации клиента можно посмотреть вот тут: https://s.nnm-club.ws/test.htmlЕсли это будет чем-то полезно, то могу завтра выложить ещё пример авторизации на golang. |
|
|
|
monkdt
Стаж: 5 лет 5 мес.
Сообщений: 1588
Ratio: 1.088
100%
|
присоединяюсь с топикстартеру. Но если публичного апи нет, то и использовать к сожалению ничего невозможно. Поправьте меня |
|
|
|
google
Стаж: 14 лет 2 мес.
Сообщений: 254
Ratio: 30.184
100%
|
monkdt, если есть потребность в публичном API, то его можно и сделать. Какие методы нужны в первую очередь? |
|
|
|
monkdt
Стаж: 5 лет 5 мес.
Сообщений: 1588
Ratio: 1.088
100%
|
google очень полезно было бы получить статус раздач, в том числе прогресс загрузки и прочее. Это простая readonly информация
ps я так понимаю автор еще хотел бы иметь возможность скачивания торрент файлов. Мне интересно и его мнение |
|
|
|
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
monkdt, ну я в принципе ничего особо не хотел, а только поинтересовался. Хотя, если будут всякие API`шные ништяки, то думаю им найдется применение. После этого и возник вопрос касательно API. Касательно API, имхо, было бы полезным: - Поиск по названию с выдачей результата в каком нибудь json, xml и т.д., с результатом вроде этого: Это фрагмент результата работы готового скрипта поиска на python, но он тоже работает через парсинг страницы с результатом поиска. Имхо там не хватает magnet-link.
- Получение информации о раздаче (название, размер, дату релиза, количество сидов/пиров и т.д.) по id страницы (viewtopic.php?p=id) и download_id (download.php?id=download_id)
- Поиск раздачи по хэшу
- Получение списка активных раздач из своего профиля
Это так, что первое пришло в голову... Добавлено спустя 3 минуты 50 секунд: google писал(а): | Пока могу предложить разобраться с авторизацией, она довольно необычно сделана. Используется протокол SRP-6a, пример реализации клиента можно посмотреть вот тут: https://s.nnm-club.ws/test.html |
Честно говоря ничего не понял . Ввел логин/пароль получил некий ключ. Что с ним дальше делать не понятно. Все на JS написано, для меня это как китайский, надо разбираться Ну еще надо разобраться, что вообще за зверь SRP-6a... |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
google
Стаж: 14 лет 2 мес.
Сообщений: 254
Ratio: 30.184
100%
|
sir.AdlerНемного про авторизацию. Страница test.html содержит демонстрационную версию клиента, который умеет менять логин/пароль на master secret. Это долгоживущий секрет (со сроком жизни около года), который для клиента дорого получать, его условно можно считать настолько же важным, как и сам пароль. Способность его получить доказывает серверу, что клиент знает логин/пароль, а клиенту, что сервер настоящий. В принципе, можно не разбираться с этой схемой, а просто воспользоваться test.html, чтобы однократно получить себе master secret. И надо научиться генерировать себе i из пункта 1 (например, для "sir.Adler" это будет "ceceaeeeeac77dfe1aacd898c46b7b617484940032f9b90c20e3b465c68529a9"), но это должно быть совсем просто. Внутри javascript-кода, который вызывает test.html, стоит куча отладочных печатей в консоль браузера, которые должны помочь отладке совместимого клиента, и значение i там тоже печатается. Чтобы вызывать API, нужно обменять этот master secret на короткоживующий (5 минут) токен. Для этого используется вызов POST на /ssn/g/$i с содержимым master=$master. Сервер должен вернуть JSON с информацией о пользователе ({"username": "****"}) и прислать три заголовка Set-Cookie, которые ставят куки с именами id, ttl и uid. Они-то как раз и нужны для дальнейших запросов. В id лежит тот самый токен, в ttl - время его жизни, а в uid - числовой ID пользвателя. В качестве теста можно попробовать сделать запрос (GET или POST) на /auth/test, при этом установив три заголовка: "X-Auth-Token: $id", "X-User-Id: $uid" и "X-Expires: $ttl". Если всё правильно, то сервер ответит кодом 200 и приветствием. |
|
|
|
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
google, благодарю за разъяснение. С теорией я малость сам разобрался, теперь надо это попытаться на практике реализовать. Для C# есть реализация протокола SRP-6a. Попробую это в коде реализовать. Беда в том, что я программист-любитель и в нем не сильно силен. Со многим разбираюсь по мере необходимости... |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
google
Стаж: 14 лет 2 мес.
Сообщений: 254
Ratio: 30.184
100%
|
Добавил /api/v1/current_torrents Авторизованный GET возвращает такую структуру: Код: выделить все { "torrents": [ { "forum_id": 225, "forum_name": "Зарубежные Фильмы (HD*Rip/LQ, DVDRip, SATRip, VHSRip)", "topic_id": 516004, "topic": "Криминальное чтиво / Pulp Fiction (1994) [H.264/720р-LQ] BDRip", "views": 47056, "gold": 4, "seeders": 30, "leechers": 0, "size": 4675703271, "added": "2012-06-27T11:14:02+04:00", "thanks": 1500, "rating": 4.9275, "download_url": "https://nnm-club.ws/download.php?csid=***********&uid=***********&id=459221", "detail_url": "https://nnmclub.to/forum/viewtopic.php?t=516004" } ] }
|
|
|
|
|
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
Пол дня ломаю голову над этим: google писал(а): | Клиент вычисляет x=hmac(hash=sha256, key=пароль, data=salt . i) |
Что-то не пойму, что должно тут вычисляться. Я сохранил вывод консоли java скрипта и путем подстановки к своему коду a, а потом и salt c B пытаюсь получить те же результаты что и java скрипт. Сперва в одной библиотеке несколько часов колупался, тоже уперся на этом. Ну хоть тресни не получается у меня тот x что должен быть. Уже и библиотеку сменил, т.к. в первой пришлось дофига чего переписывать, несколько часов провозился и плюнул. Через чур кривая. Уже другую взял, куда более "продвинутую", но так же в расчет этого x уперся. Не пойму, что этот код делает: По мануалу SRP - x = H(s, p), но при чем тут i? Пробовал в хекс редакторе уже по-разному сочетать, ну не получается от этого хэш, хоть тресни... В библиотеке на C# эта функция выглядт так: Функцию пробовал модифицировать по разному меняя типы данных и их "вид", и убирая разделитель ':' (почти во всех нагугленных примерах он есть) и меняя параметры местами, но ничего не выходит. |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
monkdt
Стаж: 5 лет 5 мес.
Сообщений: 1588
Ratio: 1.088
100%
|
google
Большое спасибо за работу. Я действительно получаю json c моим юзером от api.nnm-club.ws/ssn/g/dc1d7cc3ab5588e..., но кук к сожалению не нашел |
|
|
|
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
Все, разобрался с этим x... Надо было не в ту сторону копать, а гуглить, что за hmac и искать его реализацию на C#... S считается, а вот с M застрял. Там вроде все по аналогии с x, но что-то в итоге получается не то. Его к сожалению нет в выводе консоли, что бы посмотреть, а сервер с тем, что получается меня лесом шлет (403). С регистрацией разобрался, работает... |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
monkdt
Стаж: 5 лет 5 мес.
Сообщений: 1588
Ratio: 1.088
100%
|
sir.Adlerи что /api/v1/current_torrents возвращает json? Как делали рассказывайте. Я пока не понимаю некоторые вещи, например Цитата: | Страница test.html содержит демонстрационную версию клиента, который умеет менять логин/пароль на master secret. Это долгоживущий секрет (со сроком жизни около года) |
я получил с моим юзером уже 4 разных и каждый из них работает несколько раз и потом нужен новый. Поэтому кажется, что вероятно я сделал что-то неправильно. Потом куки я так и не получил. Пробовал и с curl и через форму post ом, единственные куки что получаю это какой-то левый __cfduid |
|
|
|
sir.Adler ®
Uploader 100+
Стаж: 14 лет 7 мес.
Сообщений: 2415
Ratio: 458.143
Поблагодарили: 1
100%
Откуда: Луганск
|
monkdt, я до этого еще не дошел Я пока только с регистрацией и получением master secret разбирался, а потом код приводил во вменяемый вид. Вот буквально только дошел до: Цитата: | Сервер должен вернуть JSON с информацией о пользователе ({"username": "****"}) и прислать три заголовка Set-Cookie |
Json то он возвращает, только что-то куков я не вижу Может что-то не так делаю, еще не разобрался. P.S.Сторонними средствами всетаки выяснил, что куки прилетают: Вот только думаю, не в том ли проблема, что домен указан другой... |
_________________ У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
|
|
|
google
Стаж: 14 лет 2 мес.
Сообщений: 254
Ratio: 30.184
100%
|
Добавил id, ttl и uid в JSON у /ssn/g/$i. Добавлено спустя 6 минут 6 секунд:monkdt Код: выделить все $ curl "https://api.nnm-club.ws/ssn/g/$(echo -n "$LOGIN" | sha256sum | head -c64)" --data-urlencode "master=$MASTER" {"id":"IIIIIIIIII","ttl":TTTTTTTTTT,"uid":11111,"username":"uuuuu"}
$ curl https://api.nnm-club.ws/api/v1/current_torrents -H "X-Auth-Token: IIIIIIIIII" -H "X-User-Id: 11111" -H "X-Expires: TTTTTTTTTT" {"torrents":[{…}]}
|
|
|
|
|
|
|
|