1

Тема: Получение ссылки с datalock.ru

Т.к. уже не первый раз натыкаюсь на deja-vu, когда вижу закодированный код с datalock.ru и после поиска уже готового решения очередной раз не найдя, решил выложить решение для HMS сдесь, чтобы можно было найти по поиску.

Функция раскодирования безобразия:

+ открыть спойлер
//////////////////////////////////////////////////////////////////////////////
int base36Decode(string input) {
  int res = 0; string CharList = "0123456789abcdefghijklmnopqrstuvwxyz";
  int len = Length(input);
  for (int i=0; i<len; i++) {
    res += (Pos(input[len-i], CharList)-1) * Int(Exp(Ln(36) * i));
  }
  return res;
}

//////////////////////////////////////////////////////////////////////////////
// Функция дешифровки javascript кода с сайта datalock.ru
string decodeDatalock(string y, string t, string u, string p) {
  int i = 0;
  int n = 0;
  int d = 0;
  string a1 = "";
  string a2 = "";
  while (true) {
    if      (i < 5)         a2 += y[i+1];
    else if (i < Length(y)) a1 += y[i+1]; i++;
    if      (n < 5)         a2 += t[n+1];
    else if (n < Length(t)) a1 += t[n+1]; n++;
    if      (d < 5)         a2 += u[d+1];
    else if (d < Length(u)) a1 += u[d+1]; d++;
    if (Length(y) + Length(t) + Length(u) <= Length(a1) + Length(a2)) break;
  }
  n = 0;
  string sResult = "";
  for (i = 0; i <  Length(a1); i += 2) {
    int shift = -1;
    if (Ord(a2[n+1]) % 2) shift = 1;
    sResult += chr(base36Decode(Copy(a1, i+1, 2)) - shift);
    n++;
    if (n >= Length(a2)) n = 0;
  }
  return sResult;
}

Поиск самого безобразия и использование вышеприведённого кода:

+ открыть спойлер
///////////////////////////////////////////////////////////////////////////////
// Создание ссылок на серии с сайта datalock.ru
void CreateFromDatalockPlaylist(string sLink) {
  string sHtml, sData, s1, s2, s3, s4, sName; THmsScriptMediaItem Item;
  if (LeftCopy(sLink, 2)=='//') sLink = 'http:'+Trim(sLink);
  
  sHtml = HmsDownloadURL(sLink, 'Referer: '+mpFilePath);
  
  // Поиск и расшифровка блока кода
  sData = sHtml;
  while (HmsRegExMatch3(".*eval\\(function\\(\\w,\\w,\\w,\\w\\).*?}\\('(.*?)','(.*?)','(.*?','.*?)'", sData, s1, s2, s3)) {
    HmsRegExMatch2("^(.*?)','(.*)", s3, s3, s4);
    sData = decodeDatalock(s1, s2, s3, s4);
  }
  // Если после всей расшифровки в этих данных нет ссылки на плейлист - ошибка
  if (!HmsRegExMatch('(datalock.ru/playlist[^"]+)', sData, sLink)) {
    Item = HmsCreateMediaItem('err', PodcastItem.ItemID);
    Item[mpiTitle] = 'Ошибка расшифровки данных с datalock.ru';
    return;
  }
  // Загружаем плейлист
  sLink = 'http://'+Trim(sLink);
  sData = HmsDownloadURL(sLink, 'Referer: '+mpFilePath);
  
  
  TStrings LIST = TStringList.Create();
  TJsonObject JSON = TJsonObject.Create();
  try {
    JSON.LoadFromString(sData);
    TJsonArray JARRAY = JSON.AsArray; if (JARRAY == nil) return;
    for (int i = 0; i < JARRAY.Length; i++) {
      TJsonObject VIDEO = JARRAY[i];
      sName = VIDEO.S['title'];
      sLink = VIDEO.S['file' ];
      sName = ReplaceStr(ReplaceStr(HmsHtmlToText(sName), '\n', ' '), '\r', '');
      sLink = HmsBase64Decode(ReplaceStr(ReplaceStr(sLink, '//Z3JpZA==', ''), '#2', ''));
      // Т.к. там ссылок может быть несколько, засовываем это всё в список, а оттуда берём последнюю ссылку
      LIST.Text = ReplaceStr(ReplaceStr(ReplaceStr(sLink, ',', '\n'), ' and ', '\n'), ' or ', '\n');
      sLink = LIST[LIST.Count-1];
      
      Item = HmsCreateMediaItem(sLink, PodcastItem.ItemID);
      Item[mpiTitle] = sName;
      
    }
  } finally { JSON.Free; LIST.Free; }
  
  sHtml = '';
}

В функцию CreateFromDatalockPlaylist можно передавать ссылки вида http://datalock.ru/player/12377

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

Sony Bravia KDL-32CX523
Спасибо сказали: михаил, smsbox3, Dr.Dru3

2

Re: Получение ссылки с datalock.ru

WendyH пишет:

решение для HMS

Еще бы для php перевести. То же попадается на пути этот datalock.

3

Re: Получение ссылки с datalock.ru

WendyH
еслт не затруднит, то можно вариант на lua?
только функцию  дешифровки js

4

Re: Получение ссылки с datalock.ru

Дайте на php

5

Re: Получение ссылки с datalock.ru

ребята ни у кого нет расшифровки на php. Спасибо

6

Re: Получение ссылки с datalock.ru

У меня последнее время этот ресурс плохо работает, толи там какая защита от чтения, толи это блокировка РНК сказывается, стартовая страница часто пустой считывается.

Спасибо сказали: bond1

7

Re: Получение ссылки с datalock.ru

bond пишет:

ребята ни у кого нет расшифровки на php. Спасибо

когда то,давненько, переписывал на php для себя

+ открыть спойлер
<?php
$link = isset($_GET["url"]) ? $_GET["url"] : "";
if (!$link) die("No url!");
$referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "http://datalock.ru/";

// Притворяемся браузером, передаём куки, подменяем Referer'а
$opts = Array('http'=>Array(
    'method'=>"GET",
    'header'=>"Referer: $referer\r\n" .
              "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36\r\n"));
$html = file_get_contents($link, false, stream_context_create($opts));
$page = Eval_Link_Decode($html);
// Если после всей расшифровки в этих данных нет ссылки на плейлист - ошибка
if(preg_match('#(datalock.ru\/playlist[^"]+)#', $page, $links)){
   $url = 'http://'.trim($links[1]);
   $json_data = file_get_contents($url, false, stream_context_create($opts));
   DatalockPlaylist($json_data);
}else{
   $error = "Ошибка! Отсутствует ссылка на плейлист с datalock.ru\n";
   exit($error);
 } 
 
/////////////////////////////////////////////////////////////////////////////
// Функция дешифровки javascript кода с сайта datalock.ru
//////////////////////////////////////////////////////////////////////////////
function decodeDatalock ($y, $t, $u, $p) {
 $i = 0;
 $n = 0;
 $d = 0;
 $a1 = "";
 $a2 = "";
 while (true) {
  if      ($i < 5         ) $a2 .= substr($y, $i, 1);
  else if ($i < strlen($y)) $a1 .= substr($y, $i, 1);
  $i++;
  if      ($n < 5         ) $a2 .= substr($t, $n, 1);
  else if ($n < strlen($t)) $a1 .= substr($t, $n, 1);
  $n++;
  if      ($d < 5         ) $a2 .= substr($u, $d, 1);
  else if ($d < strlen($u)) $a1 .= substr($u, $d, 1);
  $d++;
  if (strlen($y) + strlen($t) + strlen($u) <= strlen($a1) + strlen($a2)) break;
 }
  
 $n = 0;
 $result = "";
 for ($i = 0; $i < strlen($a1); $i += 2) {
  $int = -1;
  if (ord(substr($a2, $n, 1)) % 2) $int = 1;
  $result .= chr(intval(substr($a1, $i, 2), 36) - $int);
  $n++;
  if ($n >= strlen($a2)) $n = 0;
 }
 return $result;
}
/////////////////////////////////////////////////////////////////////////////
// Функция поиска и получения параметров при расшифровке данных  с сайта datalock.ru
//////////////////////////////////////////////////////////////////////////////
function Eval_Link_Decode($url){
    
preg_match("#.*;eval\(function\(y,t,u,p\).*?}\('(.*?)','(.*?)','(.*?)','(.*?)'#", $url, $y);
 $page = decodeDatalock($y[1], $y[2], $y[3], $y[4]);
 
 if($page){
preg_match("#;eval\(function\(y,t,u,p\).*?}\('(.*?)','(.*?)','(.*?)','(.*?)'#", $page, $t);
 $page1 = decodeDatalock($t[1], $t[2], $t[3], $t[4]);
 }
 
 if($page1){
 preg_match("#;;\s;eval\(function\(y,t,u,p\).*?}\('(.*?)','(.*?)','(.*?)','(.*?)'#", $page1, $u);
 $page2 = decodeDatalock($u[1], $u[2], $u[3], $u[4]);
 }
  if($page2) return $page2;
  else {$error = "<b>Возникла ошибка при расшифровкe получения данных</b>\n";}
             return $error;
}

/////////////////////////////////////////////////////////////////////////////
// Функция получения ссылки на плейлист с сайта datalock.ru
//////////////////////////////////////////////////////////////////////////////
 function DatalockPlaylist($data){
     
  $decode = json_decode($data,1);
  
  foreach($decode as $k =>$v){
     $name =  $v['title'];
     $file =  $v['file'];
     $name = str_replace('<br>','',$name);
     $file = str_replace('//Z3JpZA==','',$file);
     $file = str_replace('#2','', $file);
     $file = base64_decode($file);
     echo '<b>'.$name ."</b><br>". $file."<br>";
     }
    
 }
 
?>

и вот такой пример

+ открыть спойлер
1 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.01.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
2 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.02.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
3 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.03.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
4 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.04.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
5 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.05.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
6 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.06.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
7 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.07.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
8 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.08.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
9 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.09.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
10 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.10.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
11 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.11.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
12 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.12.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
13 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.13.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
14 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.14.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
15 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.15.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
16 серия 
http://data00-cdn.datalock.ru/gfi2lm/e5daa20d7d1a1a51fab0668ec0622c24/grid/7f_Nepridumannaja.zhizn.16.seriya.iz.16.2015.HDTVRip.720p.Mediaclub.a1.05.04.16.mp4
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: kliopa100, bond, Dimon1978pl3

8

Re: Получение ссылки с datalock.ru

А на каких сайтах ог используется?

9

Re: Получение ссылки с datalock.ru

Fizer пишет:

А на каких сайтах ог используется?

сизонвар

10

Re: Получение ссылки с datalock.ru

kliopa100 пишет:

сизонвар

А, да? Лазил я как-то давно на него: 1. Шмфровка там очень смешная, тас обычный бейс64с мусором, а во-вторых я как пару ссылок расшифровал увидел что там качество полный шлак, интерес парсить сразу отпал