Youtube api v3 получить keywords к ролику

12 3
S
На сайте с 13.11.2012
Offline
72
3548

Пожалуйста, помогите разобраться, не могу получить список ключевых слов от youtube.

Вот пример запроса, который эти ключевые слова отдает (tags)

https://www.googleapis.com/youtube/v3/videos?key=AIzaSyBOk9H_7v9BXEwB8RIign71H7ze2vFO1ao&fields=items(snippet(title,description,tags))&part=snippet&id=XvYOoNK0emw

Ниже функция при помощи которой я получаю title и description и сам ролик (на сайте title вывожу так: <?php echo Main::title() ?>...)

protected function getVideo($id){
$part = "snippet,statistics";
$this->url = "https://www.googleapis.com/youtube/v3/videos?key={$this->config["key"]}&part=$part&videoEmbeddable=true&videoSyndicated=true&id=$id";
$data = $this->http(TRUE);
$data->items[0]->snippet->description = nl2br($data->items[0]->snippet->description);
if ($this->badwords($data->items[0]->snippet->title)==true) {
header("Location: {$this->config["url"]}");
exit;
}
return $data->items[0];
}

Помогите, пожалуйста, в функцию выше, верно прописать запрос на получение tags (keywords) и верно вывести на сайте с расставлением запятых (видимо так <?php echo Main::tags() ?>).

Спасибо!

"]Документация snippet.tags[]

---------- Добавлено 18.02.2017 в 15:56 ----------

Добавил строку

$data->items[0]->snippet->tags = ($data->items[0]->snippet->tags);

в результате получил Array вместо ключей.

---------- Добавлено 18.02.2017 в 16:21 ----------

Доработал класс

class Main{
protected static $title = "";
protected static $description = "";
protected static $tags = "";
.......
/**
* Generate meta title
* @param none
* @return title
* @since v1.0
*/
public static function title(){
if(empty(self::$title)){
return self::$config["title"];
}else{
return self::$title;
}
}
/**
* Generate meta description
* @param none
* @return description
* @since v1.0
*/
public static function description(){
if(empty(self::$description)){
return self::$config["description"];
}else{
return self::$description;
}
}
/**
* Generate meta tags
* @param none
* @return tags
* @since v1.0
*/
public static function tags(){
if(empty(self::$tags)){
return self::$config["tags"];
}else{
return self::$tags;
}
}

по прежнему Array вместо ключей. :(

Что не так, не пойму.

SocFishing
На сайте с 26.09.2013
Offline
118
#1
Smirnof:

по прежнему Array вместо ключей. :(
Что не так, не пойму.

не вникал, но может это массив ключей? что показывает var_dump()

★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
S
На сайте с 13.11.2012
Offline
72
#2

Не знаю, верно сделал или нет, у меня var_dump() показывает это

https://i.gyazo.com/64d096f72c9de2499b6562ff5d9b386d.png

:)

ДП
На сайте с 23.11.2009
Offline
203
#3

Во-первых, не увидел в запрашиваемом урле части с fields=items(snippet(title,description,tags))

Но это ладно - возможно по дефолту теги и так отдаются.

Во вторых, после $data = $this->http(TRUE); сделайте

var_dump($data);

и посмотрите, что выводится, от этого и пляшите

S
На сайте с 13.11.2012
Offline
72
#4

var_dump($data); вывел ключи

"tags"]=> array(46) { [0]=> string(3) "new" [1]=> string(4) "best" [2]=> string(7) "electro" [3]=> string(4) "club" [4]=> string(5) "dance" [5]=> string(5) "house" [6]=> string(5) "music" [7]=> string(7) "mashups" [8]=> string(7) "remixes" [9]=> string(3) "mix" [10]=> string(4) "2017" [11]=> string(10) "club music" [12]=> string(18) "electro house 2017" [13]=> string(15) "club music 2017" [14]=> string(16) "dance music 2017" [15]=> string(16) "house music 2017" [16]=> string(11) "mashup 2017" [17]=> string(10) "remix 2017" [18]=> string(10) "club songs" [19]=> string(8) "club mix" [20]=> string(8) "mix 2017" [21]=> string(10) "best music" [22]=> string(9) "new music" [23]=> string(6) "latest" [24]=> string(3) "hot" [25]=> string(9) "hot music" [26]=> string(9) "top music" [27]=> string(6) "charts" [28]=> string(13) "best playlist" [29]=> string(10) "trip music" [30]=> string(9) "car music" [31]=> string(7) "new mix" [32]=> string(11) "dance music" [33]=> string(9) "club hits" [34]=> string(10) "club remix" [35]=> string(13) "free download" [36]=> string(4) "hits" [37]=> string(8) "top hits" [38]=> string(10) "radio hits" [39]=> string(6) "top 10" [40]=> string(2) "of" [41]=> string(10) "music 2017" [42]=> string(7) "january" [43]=> string(12) "january 2017" [44]=> string(12) "best of 2017" [45]=> string(8) "клуб" }

Во-первых, не увидел в запрашиваемом урле части с fields=items(snippet(title,description,tags))

title,description я понял, что это отдается с помощью

$data->items[0]->snippet->description = nl2br($data->items[0]->snippet->description);
if ($this->badwords($data->items[0]->snippet->title)==true) {
header("Location: {$this->config["url"]}");
exit;
}

из-за этого и добавил строку

$data->items[0]->snippet->tags = ($data->items[0]->snippet->tags);
SocFishing
На сайте с 26.09.2013
Offline
118
#5

$data->items[0]->snippet->tags = ($data->items[0]->snippet->tags);

смысл этой строки ноль) думаю у вас все получится, раз теги уже выводит.

ДП
На сайте с 23.11.2009
Offline
203
#6

Раз в ответе теги есть - то выводите их с помощью функции join() например.

Если делать что-то типа echo $arr; если $arr - массив - то вы слово Array на выходе и получите.

S
На сайте с 13.11.2012
Offline
72
#7

Т.е. Array и должно быть, осталось только верно вывести массив?

<?php
$arr=array('tags');
echo join(' ', $arr);
?>

Так выводит tags

Еще дописал функцию

/**
* Get Meta data of URL
* @param url
* @return formatted array
*/
public static function get_meta_data($url){
$content=Main::curl($url);
if($content){
$array = array('title'=>'','description'=>'','tags'=>'');
$pattern = "|<[\s]*title[\s]*>([^<]+)<[\s]*/[\s]*title[\s]*>|Ui";
if(preg_match($pattern, $content, $match)){
$array['title']=$match[1];
}
$data=get_meta_tags($url);
if(isset($data['description'])){
$array['description']=$data['description'];
}
$data=get_meta_tags($url);
if(isset($data['tags'])){
$array['tags']=$data['tags'];
}


unset($data);
unset($content);
unset($match);
return $array;
}
return FALSE;
}

изменений нет.

ДП
На сайте с 23.11.2009
Offline
203
#8

вместо

$array['tags']=$data['tags'];

попробуйте

$array['tags']=join(",",$data['tags']);

S
На сайте с 13.11.2012
Offline
72
#9

Array выводит :(

S
На сайте с 13.11.2012
Offline
72
#10

Проверил, если на youtube нет ключей у видео, у меня в keywords отображаются ключи которые я прописал в config для tags.

Если у видео есть ключи, у меня Array

public static function tags(){
if(empty(self::$tags)){
return self::$config["tags"];
}else{
return self::$tags;
}
}

получается, что работает на половину?

Осталось разобраться, как вывести эти ключи.

Видимо проблема в том, что они отдаются не просто текстом а так:

"tags": [ "new",
"best",
............
"electro"
]

https://www.googleapis.com/youtube/v3/videos?key=AIzaSyBOk9H_7v9BXEwB8RIign71H7ze2vFO1ao&fields=items(snippet(title,description,tags))&part=snippet&id=XvYOoNK0emw

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий