Advertisement
Guest User

Untitled

a guest
Feb 4th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.01 KB | None | 0 0
  1. Короче, анончики, беда. Не хочу отвлекать вас от игроделания (да вы, собственно, можете и не отвлекаться, ибо проблема на уровне пасты про Кирилла и его корованы), но
  2.  
  3. Хочу сделать, чтобы у всех блоков с названиями каналов на странице twg.cojam.ru/s/ была анимация при их онлайне, с переключением, если канал вдруг стал онлайн/оффлайн (для удобства, чтобы не перезагружать страничку каждый раз для проверки). Можете сами поиграться с анимацией, если добавите к любому из стрим-блоков класс "livenow".
  4. Всё проблема в том, что я хочу сделать всё хорошо, но не знаю как. Ибо в JS и PHP я могу на довольно невысоком уровне.
  5.  
  6. Схему реализации я вроде понимаю (может открыть код страницы, чтобы было нагляднее):
  7.  
  8. У некоторого количества блоков есть дата-аттрибут "service". Если значение этого аттрибута равно "twitch", то со всех них JS-ом собираются в массив все значения дата-аттрибутов "channel", и отправляются ajax-ом на сервер примерно в таком виде: service.php?tw=rulait,sharpenedpikes,ovrog,levelgd. Сервер делает запрос по этим каналам на апи твича, получает ответ, вырезает из него ненужное и отдаёт свой ответ запрашивающему. Почему нельзя обратиться напрямую с клиента через JS на апи твича? Потому что в его ответе уж слишком много лишних данных, а периодически запрашивать такой большой объём данных на клиенте ну как-бы НЕХОРОШО.
  9.  
  10. В случае с другими стриминговыми сервисами: дата-аттрибут "service" может принимать значения не только "twitch", но и "hitbox", "youtube", "gg" (Goodgame) и "anonfm" (это специально для ыыы, там кибергейм на самом деле). Остальная схема в этих случаях аналогична твичу. Для трубы и хитбокса по нормальному реализовать ничего не получится, потому что к ним для запроса нужен апи-ключ. Остальное более-менее открыто.
  11. Запрос в таком случае будет примерно такой: service.php?tw=rulait,sharpenedpikes&gg=channel1,channel2&cg=fiuu
  12.  
  13. Что по апи сервисов:
  14. Апи твича https://api.twitch.tv/kraken/streams?channel=rulait,sharpenedpikes,monstercat,DreadzTV - тут загвоздка в том, что всё, что отдаётся апи в массиве "streams", отдаётся от последнего к первому (то есть первый в списке пойдёт DreadzTV, потом monstercat и так далее, но не rulait, а потом sharpenedpikes, понятно в общем), причём неактивные каналы не выдаются (в смысле вообще не выдаются, их просто нет в ответе). Думаю, проверять соответствие можно по параметру "streams"->"channel"->"name". Проверять онлайн/не онлайн можно, в принципе, просто по тому, существует "channel" от какого-то канала или нет.
  15. Апи гудгейма http://goodgame.ru/api/getchannelstatus?id=Miker,Pomi,etozhemad&fmt=json - нужен параметр "status".
  16. Апи кибергейма - http://api.cybergame.tv/w/streams2.php?channel=fiuu - нужен параметр "online".
  17. Ютуб и хитбокс не нужны, как я уже писал.
  18.  
  19. Ответ от сервера (после обработки им всех данных от апи) может быть такой:
  20.  
  21. {
  22. "twitch": {
  23. "rulait": 0,
  24. "sharpenedpikes": 0
  25. },
  26. "goodgame": {
  27. "channel1": 0,
  28. "channel2": 1
  29. },
  30. "anonfm": 1
  31. }
  32.  
  33. Соотвественно, 1 означает, что канал онлайн, 0 - оффлайн.
  34.  
  35. После получения ответа от сервера, JS на клиенте проверяет, какие каналы онлайн, и добавляет к соответствующим им блокам класс "livenow". Если канал в какой-то момент времени становится оффлайн, то класс этот у него удаляется. Опционально можно количество зрителей ещё показывать. Та-дам, теперь остаётся только периодически редачить html-файлик со всеми каналами. Всё вполне реализуемо, осталось узнать, как.
  36.  
  37. Зачем я это всё расписывал, сам не понимаю. Но если вдруг у вас найдётся время помочь это дело запилить, то с радостью приму ваше предложение. Заплатить мне вам, к сожалению, нечего, сразу говорю. Но любовь и обожание анонов к вам гарантируется, ибо удобство это всегда хорошо.
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement