[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Интересное PHP. Просто погудеть.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Эли4ка
Цитата
Чесно говоря ничего не понял... Найди ссылку, где будет криво работать. Я же особо подробностей не знаю. Но судя по JSON, код 100% рабочий.

Я же уже написала потом ниже, что была не права sad.gif
Цитата
И раз все понятно, класс для скачивания файлов сама сделай, тут и разберем. А потом все в кучу склеим и ошибки настроим.

Хорошо. Сегодня сделаю.
Эли4ка
twin, 2 дня билась над проблемой.
В ссылке https://www.instagram.com/p/Bc5E0j2H-em/?__a=1 6 медиа материалов, но класс упорно возвращал 7 элементов. Сейчас структура json ответа ноды такова:
node": {

"__typename": "GraphVideo",
"id": "1673389481926777141",
"shortcode": "Bc5Et4pHtk1",
"dimensions": {
"height": 750,
"width": 750
},
"gating_info": null,
"media_preview": null,
"display_url": "https://instagram.fhen2-1.fna.fbcdn.net/vp/3101daf917422cff058c0191b37f35ee/5AAE5E33/t51.2885-15/e35/25011510_190273448190683_2768784369974771712_n.jpg",
"display_resources": [
{
"src": "https://instagram.fhen2-1.fna.fbcdn.net/vp/1b0351f26ce22f0a9f141f2ce028fc97/5AAE9A52/t51.2885-15/s640x640/sh0.08/e35/25011510_190273448190683_2768784369974771712_n.jpg",
"config_width": 640,
"config_height": 640
},
{
"src": "https://instagram.fhen2-1.fna.fbcdn.net/vp/3101daf917422cff058c0191b37f35ee/5AAE5E33/t51.2885-15/e35/25011510_190273448190683_2768784369974771712_n.jpg",
"config_width": 750,
"config_height": 750
},
{
"src": "https://instagram.fhen2-1.fna.fbcdn.net/vp/3101daf917422cff058c0191b37f35ee/5AAE5E33/t51.2885-15/e35/25011510_190273448190683_2768784369974771712_n.jpg",
"config_width": 1080,
"config_height": 1080
}
],
"dash_info": {
"is_dash_eligible": false,
"video_dash_manifest": null,
"number_of_qualities": 0
},
"video_url": "https://instagram.fhen2-1.fna.fbcdn.net/vp/1f4bf57c5a3a9ec046fdf0dbb9d22a1e/5AAE98DD/t50.2886-16/25477074_1528186863933136_2820372372479723456_n.mp4",
"video_view_count": 3748,
"is_video": true,
"should_log_client_event": false,
"tracking_token": "eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiOWQ5ZjI2ZjU0ZDU4NGEyZTk4M2JkODJkMDllZjA2MTgxNjczMzg5NDgxOTI2Nzc3MTQxIiwic2VydmVyX3Rva2VuIjoiMTUyMTIyMjIxNzQ3OXwxNjczMzg5NDgxOTI2Nzc3MTQxfDIzMDczOTY1NzR8OWQ1ODlhYmM4NjI4ZmZiZTUxNjgwZjU0MmM2NTU4YWEwOWQxYWU2MmVmMDNjZmMwYWQ4Y2EyM2I0YTQ0NDIwMyJ9LCJzaWduYXR1cmUiOiIifQ==",
"edge_media_to_tagged_user": {
"edges": [ ]
}

}

То есть и display_url и video_url есть и при использовании
$this->createPaths($media);
$this->disassembleCollection($media);

ф-я createPaths($media) захватывает и видео и изображение. А должна только видео. Если ее убрать, то вернет 6 значений. Как исправить эту ситуацию еще не придумала.
Эли4ка
class Media
{
protected $json;
protected $paths = array();
protected $filesizes = array();

public function __construct($url)
{
set_error_handler(function () use ($url) {
throw new RuntimeException($url);
});

$json = file_get_contents($url);
restore_error_handler();

$this->json = json_decode($json);
$error = json_last_error();

if ($error !== JSON_ERROR_NONE) {
throw new DomainException($error);
}

$media = $this->json->graphql->shortcode_media;
$this->createPaths($media);//когда ее используешь получается одна лишняя ссылка
$this->disassembleCollection($media);
}

public function getPaths()
{
return $this->paths;
}

protected function createPaths($media)
{
if ($media->is_video) {
$this->setVideo($media);
} else {
$this->setPhoto($media);
}
}


protected function disassembleCollection($media)
{
$collection = $media->edge_sidecar_to_children->edges;

foreach ($collection as $part) {

if ($part->node->is_video) {
$this->setVideo($part->node);
} else {
$this->setPhoto($part->node);
}
}
}


protected function setVideo($media)
{
$this->paths[] = $media->video_url;
}

protected function setPhoto($media)
{
$this->paths[] = $media->display_url;
}

public function download_file($urls){
foreach($urls as $url){
$src = fopen($url, 'r');
$dest1 = fopen($dir . $name, 'w');
$this->filesizes[] = stream_copy_to_stream($src, $dest1);
fclose($src);
fclose($dest1);
}
return $this->filesizes;
}
}


$media = new Media('https://www.instagram.com/p/Bc5E0j2H-em/?__a=1');
$paths = $media->getPaths();
$size = $media->download_file($paths);
?><pre><?
var_dump($size);


Добавила функцию для скачивания файла.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.