Страница 1 из 8
Загрузка фотографий на сервер вконтакте
Добавлено: 14 май 2011, 19:34
whitenigger
Почитал документацию вконтакте, но к сожалению там все очень скудно и для начинающего совсем ни чего не понятно.
К сожалению с JavaScript до этого вообще не работал, но встала задача реализовать вот такое приложение:
Пользователь через форму загружает фотографию и в базу MySQL должен записаться ее адрес. Если хранить фотографии на своем сервере то проблем с этим ни каких на php все реализовал. Но нужно хранить именно на сервере вконтакте. Почитал про photos.getUploadServer но не могу понять как узнать ID альбома, в который необходимо загрузить фотографии. Или этот альбом надо вначале создать?
Помогите как говориться хорошим советом, ну или исходник какой нить поковырять киданите. Буду очень благодарен.
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 15 май 2011, 11:17
whitenigger
После прочтения всей информации накидал вот такой скрипт:
Код: Выделить всё
<script type="text/javascript"> VK.init(function() { VK.api('wall.getPhotoUploadServer', {}, function (data) { if (data.response) { $.post( // отправляю со своего сервера изображение на upload_url 'http://test.ru/demo_vk/1305295000_demotiv.jpg', {upload_url:data.response.upload_url}, function (json) { VK.api('wall.savePost', {wall_id: uid, message: message, server: json.server, photo: json.photo, hash:json.hash, post_id:123}, function(data) { if (data.response) { VK.callMethod("saveWallPost", data.response.post_hash); console.log(data); } } ); }, 'json'); } }); }); </script>
Но вот не пойму в чем ошибка ибо не работает...
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 15 май 2011, 12:52
whitenigger
Короче сам разобрался

Выкладываю исходник может кому и пригодиться..
Код: Выделить всё
<script type="text/javascript"> VK.init(function() { VK.api('wall.getPhotoUploadServer', {}, function (data) { if (data.response) { $.post( // отправляю со своего сервера изображение на upload_url // необходимо создать на сервере файл uploadimage.php код для этого фойла см. ниже 'http://test.ru/uploadimage.php', {upload_url:data.response.upload_url}, function (json) { VK.api("wall.savePost", { wall_id: "<Ваше ID>", server: json.server, photo:json.photo, hash: json.hash, post_id:"123", photo_id:data.id , message: '<текст для вывода на стену>' }, function(data) { VK.callMethod("saveWallPost", data.response.post_hash); }); }, 'json'); } }); });</script>
Файл uploadimage.php должен лежать в папке с фотографией
Код: Выделить всё
<?php if (isset($_POST["upload_url"])) { $upload_url = $_POST["upload_url"]; $post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $upload_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params); $result = curl_exec($ch); curl_close($ch); //var_dump($result); $result = json_decode($result); $mess = array (server => $result->server, photo=> $result->photo, hash => $result->hash); echo json_encode($mess); } ?>
Собрал все это в кучу изучая данный форум! Так что выражаю благодарность всем тем людям которые давали ответы и выкладывали куски своих скриптов!
Но все таки остался вопрос.. Я так понимаю что для отображения большой фотографии при клике по записе на стене. Нужен Flash контейнер для Iframe приложений... Подскажите как его реализовать или где подробно об этом почитать. Ибо с Flash до сегодняшнего дня вообще не работал.
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 30 сен 2011, 20:22
13hakta
Моё вложение сообществу. Прокси-скрипт для загрузки фото на вконтакте, облегчая работу через IFrame.
Готов к использованию в приведенном ниже виде. Для его использования направляете на него файлы file1-file5 и параметр upload_url. Далее получаете проксированный ответ от сервера ВК.
Файл uploader.php
Код: Выделить всё
<?php// Vitaly Chekryzhev <13hakta@gmail.com>, 2011// VKontakte photo-upload proxy // Temporary dir for files$uploads_dir = '/tmp'; if (isset($_POST["upload_url"])) { $upload_url = $_POST["upload_url"]; $tmp_files = array(); foreach ($_FILES as $fieldname => $upfile) { if ($upfile["error"] == UPLOAD_ERR_OK) { $newname = "$uploads_dir/" . $upfile['name']; move_uploaded_file($upfile['tmp_name'], $newname); $post_params[$fieldname] = "@$newname"; $tmp_files[] = $newname; } } // Connect to VK through CURL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $upload_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params); $result = curl_exec($ch); curl_close($ch); // Decode results $result = json_decode($result); // Create response $msg = array('aid' => $result->aid, 'server' => $result->server, 'photos_list' => $result->photos_list, 'hash' => $result->hash); echo json_encode($msg); // Cleanup foreach ($tmp_files as $upfile) unlink($upfile);}?>
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 03 дек 2011, 22:41
igor_ch
А что делать, если из uploadimage.php приходит следующий json-ответ:
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 04 дек 2011, 15:52
Александр
igor_ch
При запросе с сервера верно передаешь все параметры?
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 04 дек 2011, 16:48
boombast1k
whitenigger писал(а):Короче сам разобрался

Выкладываю исходник может кому и пригодиться..
Код: Выделить всё
<script type="text/javascript"> VK.init(function() { VK.api('wall.getPhotoUploadServer', {}, function (data) { if (data.response) { $.post( // отправляю со своего сервера изображение на upload_url // необходимо создать на сервере файл uploadimage.php код для этого фойла см. ниже 'http://test.ru/uploadimage.php', {upload_url:data.response.upload_url}, function (json) { VK.api("wall.savePost", { wall_id: "<Ваше ID>", server: json.server, photo:json.photo, hash: json.hash, post_id:"123", photo_id:data.id , message: '<текст для вывода на стену>' }, function(data) { VK.callMethod("saveWallPost", data.response.post_hash); }); }, 'json'); } }); });</script>
Файл uploadimage.php должен лежать в папке с фотографией
Код: Выделить всё
<?php if (isset($_POST["upload_url"])) { $upload_url = $_POST["upload_url"]; $post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $upload_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params); $result = curl_exec($ch); curl_close($ch); //var_dump($result); $result = json_decode($result); $mess = array (server => $result->server, photo=> $result->photo, hash => $result->hash); echo json_encode($mess); } ?>
Собрал все это в кучу изучая данный форум! Так что выражаю благодарность всем тем людям которые давали ответы и выкладывали куски своих скриптов!
Но все таки остался вопрос.. Я так понимаю что для отображения большой фотографии при клике по записе на стене. Нужен Flash контейнер для Iframe приложений... Подскажите как его реализовать или где подробно об этом почитать. Ибо с Flash до сегодняшнего дня вообще не работал.
я создал 2 таких скрипта,открываю первый в приложении,но ничего не происходит вообще:(. скрипт не изменял,за исключением своих данных!
может кнопку какую то нужно поместить?
Код: Выделить всё
$post_params['photo'] = '@'.'1305295000_demotiv.jpg'; ///ну тут понятно что это ваша фотка
что вот тут обозначает @?
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 04 дек 2011, 18:47
igor_ch
Все сделано по примеру. Ничего не менял, за исключением установки имени файла фотки.
Возникает такое ощущение, что curl не получает правильно ответа, поскольку, если полученный адрес сервера ввести в адресной строке браузера, то возвращается и server и hash.
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 04 дек 2011, 19:46
boombast1k
igor_ch может тебе еще надо id свой поставить? или ты так и сделал?
Re: Загрузка фотографий на сервер вконтакте
Добавлено: 04 дек 2011, 22:02
Александр
boombast1k писал(а):что вот тут обозначает @?
CURLOPT_POSTFIELDS
The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path.
http://php.net/manual/en/function.curl-setopt.php