За последние 24 часа нас посетил 16061 программист и 1541 робот. Сейчас ищут 863 программиста ...

получение изображений с яндекс диска

Тема в разделе "Прочие вопросы по PHP", создана пользователем dmuradz, 10 июл 2014.

  1. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    привет, всем!
    недавно встала задача, сохранения и вывода изображений с яндекс диска на сайте.
    С сохранением изображений на диск справился используя https://github.com/DEN007/Yandex.Disk-FULL-API этот класс.

    Но вот с получением файлов возникают проблемы.
    описываю по порядку что я делал и какой результат получал.

    1. пытался вывести файлы используя метод get() того же класса

    ls($path) - метод вывода всех файлов из указанного url $path
    get($url, $buffer) получение файла
    // $value['href'] - ссылка на файл
    // $value['getcontenttype'] - тип файла
    вот код:
    Код (Text):
    1.  
    2.                    //формирую url к папке с файлами
    3.                   $path = '/'.$config['year'].'/'.$palmer_company.'/'.$id;
    4.                   // получаю список файлов из папки
    5.                   $dir = $wdc->ls($path);
    6.                   foreach ($dir as $value) {
    7.                       // если тип файла png, то получаем его
    8.                       if ($value['getcontenttype'] == 'image/png') {
    9.                          $http_status = $wdc->get($value['href'], $buffer);
    10.                          print ' статус сервера ' . $http_status["status"] . '. размер файла ' . strlen($buffer). ' байт.<br>';
    11.                       // кодирую файл, чтобы вставить его в теги img
    12.                          $buffer = base64_encode($buffer);
    13.                          echo "<img class='thumb' src='data:{$value['getcontenttype']};base64,{$buffer}'>";
    14.                       }
    15.                   }
    Результат: возвращает только первую фотографию.


    Метод 2. Пытаюсь get запросом получить доступ к файлам как описано тут: http://api.yandex.ru/disk/doc/dg/reference/preview.xml

    /**
    * делаем GET запос к яндекс фоткам.
    * устанавливаем заголовоки, в ней передаем пароль и логин от яндекса в base64
    * */
    Код (Text):
    1.  
    2.         $login = "login"; //можно и без @yandex.ru
    3.         $password = "password";
    4.  
    5.         $headers = array("Authorization: Basic " . base64_encode($login . ":" . $password)); //формируем заголовки для успешной авторизации
    6.  
    7.         $ch = curl_init ();
    8.         curl_setopt ($ch , CURLOPT_URL , 'https://webdav.yandex.ru/3.png?preview&size=250x');
    9.         curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11");
    10.         curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    11.         curl_setopt ($ch , CURLOPT_HEADER , 0);
    12.         curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 );
    13.         curl_setopt ($ch , CURLOPT_BINARYTRANSFER , 1);
    14.         $content = curl_exec($ch);
    15.         curl_close($ch);
    Результат: bad authorization!

    Подскажите пожалуйста, что я не так делаю? и куда копать?
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  3. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Есть легенда, что, кликнув ссылку, можно попасть на страницу, с которой она связана.

    Не, ну правда, там же все написано.
     
  5. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    если у меня получилось бы сделать то что там написано, то я не стал бы тут публиковать эту тему тут
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тогда надо не спрашивать подробности, а говорить, что делал, и что не получилось.
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    чему там не получиться-то?
    Шлёшь https://oauth.yandex.ru/authorize?response_type=code&client_id={id приложения} и получаешь на callback url код
    Постом постом на https://oauth.yandex.ru/token шлёшь grant_type=authorization_code&code={полученный в прошлом шаге код}&client_id= {id приложения}&client_secret={пароль приложения} получаешь токен
    Шлёшь запрос на https://cloud-api.yandex.net/v1/disk/resources/download?path={путь к твоему файлу} и указываешь в заголовках Authorization: OAuth {полученный токен}

    В ответе json с ссылкой для скачки. Всё же линейно.

    p.s.
    Можно, правда, получить токен сразу, минуя код, если послать запрос на https://oauth.yandex.ru/authorize?response_type=token&client_id={id приложения}, но там токен после якоря указан и замучаешься в php его получать
     
  8. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    вот встреваю я именно тут, как отправить запрос?
    какой указывать путь и как устанавливать в заголовках Authorization: OAuth?

    чуваки, помогите ))))
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
  10. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    Код (PHP):
    1. $headers = array("Authorization: OAuth {647529b0e06cxxxx.....xxxx88da3aa}");
    2.  
    3.  
    4.         $curl = curl_init('https://cloud-api.yandex.net/v1/disk/resources/download?path=3.png');
    5.             curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    6.             curl_setopt($curl,CURLOPT_HEADER, true);
    7.             curl_setopt($curl, CURLOPT_POST, true);
    8.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    9.             curl_exec($curl);
    10.  
    11.          $info = curl_getinfo($curl);
    // используем BB-коды. Luge
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вот фигурные скобки здесь не нужны. Я же так просто параметры отметил.
    и путь должен быть от корня
     
  12. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    файл находится в корневом каталоге.
    ничего не возвращает в ответе ((
     
  13. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    про curl_exec() почитай. Как он ответ возвращает

    и от корня, это
     
  14. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    выводит !!!)))
    $headers = array("Authorization: OAuth 647529b0e06cxxxx.....xxxx88da3aa");
    $curl = curl_init('https://cloud-api.yandex.net/v1/disk/resources/download?path=%2F3.png');
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl,CURLOPT_HEADER, true);
    curl_exec($curl);
    $info = curl_getinfo($curl);
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Урррря!! Зарррработалоо!!!!!!
     
  16. dmuradz

    dmuradz Новичок

    С нами с:
    21 апр 2014
    Сообщения:
    8
    Симпатии:
    0
    теперь вопрос, когда я зареган с аккаунта на котором я получал token, он выдает ссылки на файлы для скачивания, а когда выхожу с этого профиля, то ссылки ведут на несуществующую страницу