Классический форум-трекер
canvas not supported
Нас вместе: 4 114 630

Публичный API торрент-трекера


Страницы:  1, 2  След. 
 
RSS
Начать новую тему   Ответить на тему    Торрент-трекер NNM-Club -> Информация и поддержка -> Техподдержка форум-трекера
Автор Сообщение
sir.Adler ®
Лауреат КТ
Uploader 100+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
Имеется ли для трекера публичный api для работы с трекером?

Вчера стала задача перекачать все торрент файлы своих активных раздач. Пришлось это все через парсинг html страниц делать, что во-первых не сильно очень не удобно, а во-вторых долго, а в-третьих, возможно, создаёт избыточную нагрузку на сервер (мини DDoS :D).
Вот и возник вопрос, а есть ли более простые средства для решения подобных задач?
Например, получить список своих активных раздач или результат поиска по трекеру в каком нибудь более презентабельном виде (json, xml, и т.д.)?

P.S. Есть домен api.nnm-club.ws, только не понятно, что это и для чего. Никакой информации как им пользоваться и можно ли им пользоваться не нашел...
P.S.S. Можно ли как-нибудь осуществлять поиск раздачи по хэшу из magnet-link?

_________________
У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
google
Стаж: 9 лет 8 мес.
Сообщений: 230
Ratio: 30,184
100%
API, действительно, имеется, но пока что непубличный, и точка входа в него — https://api.nnm-club.ws/
Ручку для получения активных раздач и поиска по хешу сделаю, раз есть такая потребность.

Пока могу предложить разобраться с авторизацией, она довольно необычно сделана. Используется протокол SRP-6a, пример реализации клиента можно посмотреть вот тут: https://s.nnm-club.ws/test.html

Если это будет чем-то полезно, то могу завтра выложить ещё пример авторизации на golang.
monkdt
Только чтение
Стаж: 11 мес. 21 день
Сообщений: 933
Ratio: 0,951
100%
germany.gif
присоединяюсь с топикстартеру. Но если публичного апи нет, то и использовать к сожалению ничего невозможно. Поправьте меня
google
Стаж: 9 лет 8 мес.
Сообщений: 230
Ratio: 30,184
100%
monkdt, если есть потребность в публичном API, то его можно и сделать.
Какие методы нужны в первую очередь?
monkdt
Только чтение
Стаж: 11 мес. 21 день
Сообщений: 933
Ratio: 0,951
100%
germany.gif
google
очень полезно было бы получить статус раздач, в том числе прогресс загрузки и прочее. Это простая readonly информация

ps я так понимаю автор еще хотел бы иметь возможность скачивания торрент файлов. Мне интересно и его мнение
sir.Adler ®
Лауреат КТ
Uploader 100+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
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
Стаж: 9 лет 8 мес.
Сообщений: 230
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+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
google, благодарю за разъяснение.
С теорией я малость сам разобрался, теперь надо это попытаться на практике реализовать. Для C# есть реализация протокола SRP-6a. Попробую это в коде реализовать.
Беда в том, что я программист-любитель и в нем не сильно силен. Со многим разбираюсь по мере необходимости...

_________________
У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
google
Стаж: 9 лет 8 мес.
Сообщений: 230
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+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
Пол дня ломаю голову над этим:
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
Только чтение
Стаж: 11 мес. 21 день
Сообщений: 933
Ratio: 0,951
100%
germany.gif
google

Большое спасибо за работу. Я действительно получаю json c моим юзером от api.nnm-club.ws/ssn/g/dc1d7cc3ab5588e..., но кук к сожалению не нашел
sir.Adler ®
Лауреат КТ
Uploader 100+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
Все, разобрался с этим x...
Надо было не в ту сторону копать, а гуглить, что за hmac и искать его реализацию на C#...
S считается, а вот с M застрял. Там вроде все по аналогии с x, но что-то в итоге получается не то. Его к сожалению нет в выводе консоли, что бы посмотреть, а сервер с тем, что получается меня лесом шлет (403).
С регистрацией разобрался, работает...

_________________
У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
monkdt
Только чтение
Стаж: 11 мес. 21 день
Сообщений: 933
Ratio: 0,951
100%
germany.gif
sir.Adler

и что /api/v1/current_torrents возвращает json? Как делали рассказывайте. Я пока не понимаю некоторые вещи, например
Цитата:
Страница test.html содержит демонстрационную версию клиента, который умеет менять логин/пароль на master secret. Это долгоживущий секрет (со сроком жизни около года)


я получил с моим юзером уже 4 разных и каждый из них работает несколько раз и потом нужен новый. Поэтому кажется, что вероятно я сделал что-то неправильно. Потом куки я так и не получил. Пробовал и с curl и через форму post ом, единственные куки что получаю это какой-то левый __cfduid
sir.Adler ®
Лауреат КТ
Uploader 100+
Стаж: 10 лет 1 мес.
Сообщений: 1397
Ratio: 335,047
Раздал: 168 TB
100%
Откуда: Луганск
ussr.gif
monkdt, я до этого еще не дошел :(
Я пока только с регистрацией и получением master secret разбирался, а потом код приводил во вменяемый вид.
Вот буквально только дошел до:
Цитата:
Сервер должен вернуть JSON с информацией о пользователе ({"username": "****"}) и прислать три заголовка Set-Cookie

Json то он возвращает, только что-то куков я не вижу :смущение:
Может что-то не так делаю, еще не разобрался.

P.S.Сторонними средствами всетаки выяснил, что куки прилетают:
Вот только думаю, не в том ли проблема, что домен указан другой...

_________________
У кого есть наука, тот не нуждается в религии. © Иоганн Вольфганг фон Гёте
google
Стаж: 9 лет 8 мес.
Сообщений: 230
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":[{…}]}
Показать сообщения:   
Начать новую тему   Ответить на тему    Торрент-трекер NNM-Club -> Информация и поддержка -> Техподдержка форум-трекера Часовой пояс: GMT + 3
Страницы:  1, 2  След.
Страница 1 из 2