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

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

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

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

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн