Как стать автором
Обновить

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

Время на прочтение4 мин
Количество просмотров26K
Предлагаю вашему вниманию 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.  
Теги:
Хабы:
Всего голосов 100: ↑94 и ↓6+88
Комментарии125

Публикации

Работа

PHP программист
83 вакансии

Ближайшие события