Pull to refresh

Автоматическая загрузка файлов на Яндекс.Диск

Reading time4 min
Views26K
Предлагаю вашему вниманию PHP скрипт автоматической загрузки файлов на сервис Яндекс.Диск. Скрипт прост до безобразия, достаточно передать ему в качестве параметров логин, пароль и путь к файлу и в результате он загрузит ваш файл на сервис и выдаст вам ссылку на него. Не знаю, сколько еще меня вместе с моими постами будет терпеть Яндекс, но все-таки приведу исходный код скрипта :)

Copy Source | Copy HTML
  1. <?php
  2. print uploadFile(ваш_логин, ваш_пароль, путь_к_файлу)."\n";
  3.  
  4. function uploadFile($login, $password, $filename)
  5. {
  6.     $cookie_file = 'cookie.txt';
  7.     $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';
  8.  
  9.     // логинимся в систему
  10.     $ch = curl_init('https://passport.yandex.ru/passport?mode=auth');
  11.  
  12.     $fields = array();
  13.     $fields[] = "login=$login";
  14.     $fields[] = "passwd=$password";
  15.     $fields[] = "twoweeks=yes";
  16.     curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $fields));
  17.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  18.     curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
  19.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  20.     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  21.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,  0);
  22.     curl_setopt($ch, CURLOPT_POST, 1);
  23.     $result = curl_exec($ch);
  24.     $info = curl_getinfo($ch);
  25.  
  26.     if ($info['http_code'] != 200) return false;
  27.  
  28.     // запрашиваем сервер для загрузки файла
  29.     $url = 'http://narod.yandex.ru/disk/getstorage/?rnd=' . (mt_rand( 0, 777777) + 777777);
  30.  
  31.     curl_setopt($ch, CURLOPT_URL, $url);
  32.     curl_setopt($ch, CURLOPT_POST,  0);
  33.     curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  34.     $result = curl_exec($ch);
  35.     $info = curl_getinfo($ch);
  36.  
  37.     if (preg_match('/"url":"(.*?)", "hash":"(.*?)", "purl":"(.*?)"/', $result, $m)) {
  38.       $upload_url = $m[1];
  39.       $hash = $m[2];
  40.       $purl = $m[3];
  41.     } else {
  42.         return false;
  43.     }
  44.  
  45.     // загружаем файл на сервер
  46.     $url = $upload_url . '?tid=' . $hash;
  47.     $fields = array();
  48.     $fields['file'] = '@' . $filename;
  49.     curl_setopt($ch, CURLOPT_URL, $url);
  50.     curl_setopt($ch, CURLOPT_REFERER, 'http://narod.yandex.ru/');
  51.     curl_setopt($ch, CURLOPT_POST, 1);
  52.     curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  53.     $result = curl_exec($ch);
  54.     $info = curl_getinfo($ch);
  55.  
  56.     if ($info['http_code'] != 200) return false;
  57.  
  58.  //   print_r($info);
  59.     // проверяем прогресс бар
  60.     $url = $purl . '?tid=' . $hash . '&rnd=' . (mt_rand( 0, 777777) + 777777);
  61.  
  62.     curl_setopt($ch, CURLOPT_URL, $url);
  63.     curl_setopt($ch, CURLOPT_POST,  0);
  64.     $result = curl_exec($ch);
  65.  
  66.     if (!preg_match('/"status": "done"/', $result, $m)) {
  67.       return false;
  68.     }
  69.  
  70.     // переходим на страницу и определяем ссылку
  71.     $url = 'http://narod.yandex.ru/disk/last/';
  72.     curl_setopt($ch, CURLOPT_URL, $url);
  73.     $result = curl_exec($ch);
  74.     curl_close($ch);
  75.  
  76.     if (preg_match('/<span class=\'b\-fname\'><a href="(.*?)">/', $result, $m)) {
  77.       $fileURL = trim($m[1]);
  78.       return $fileURL;
  79.     }
  80.  
  81.     return false;
  82. }
  83. ?>
  84.  
Tags:
Hubs:
+88
Comments125

Articles