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

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

Время на прочтение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 программист
120 вакансий

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

Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
OTUS CONF: GameDev
Дата30 мая
Время19:00 – 20:30
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область