Search
Write a publication
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:
Total votes 100: ↑94 and ↓6+88
Comments125

Articles