Foros del Web » Programando para Internet » PHP »

paginacion videos youtube

Estas en el tema de paginacion videos youtube en el foro de PHP en Foros del Web. Buenas Estoy utilizando la api v3 de youtube para mostar en una web todos los videos de un canal, el problema es que solo te ...
  #1 (permalink)  
Antiguo 28/07/2013, 20:13
Avatar de raid_  
Fecha de Ingreso: diciembre-2010
Mensajes: 132
Antigüedad: 13 años, 4 meses
Puntos: 12
paginacion videos youtube

Buenas
Estoy utilizando la api v3 de youtube para mostar en una web todos los videos de un canal, el problema es que solo te muestra 50 videos y te da un valor para la pagina siguiente, pero no te deja seleccionar pagina. asi que solo te deja mostrar 50 y un enlace para los proximos 50, no puedes ir al 200 por ejemplo.

Este es una parte del codigo que estoy utilizando
Código PHP:
Ver original
  1. $api_json_lista1 = file_get_contents("https://www.googleapis.com/youtube/v3/playlists?channelId=xxxx&key=xxx&maxResults=50&part=snippet&fields=items(snippet(title)),items(id),pageInfo(totalResults),nextPageToken");
  2.                                 $json_decode_lista1 = json_decode($api_json_lista1);
  3.                                 $json_decode_lista->nextPageToken;
  4.                                 $lista1 = array();
  5.                                 foreach($json_decode_lista1->items as $child_lista1){
  6.                                     $lista1[] = $child_lista1->id;
  7.                                     $titulo_lista1 = $child_lista1->snippet->title;
  8.                                     $id_lista1 = $child_lista1->id;
  9.                                    
  10.                                     echo '<h3 class="portfolioFilter_tab">';
  11.                                     echo '<a href="#" data-filter=".'. $id_lista1 .'"  class="'. $id_lista1 .'">'. $titulo_lista1 .'</a>';
  12.                                     echo '</h3>';
  13.  
  14.                                 }

Pero con este codigo solo me muestra 50 resultado, pero me devuelve un valor para la pagina siguiente

Código PHP:
Ver original
  1. $json_decode_lista->nextPageToken;
  2.  
  3. // "nextPageToken": "CAQQAA",
  4. // CAQQAA es el id de la pagina siguiente, y si añado ese valor a la url me devuelve los //50 videos siguientes
  5. file_get_contents("https://www.googleapis.com/youtube/v3/playlists?channelId=xxxx&key=xxx&maxResults=50&part=snippet&fields=items(snippet(title)),items(id),pageInfo(totalResults),nextPageToken&pageToken=CAEQAA

ahora mi pregunta, ¿puedo crear un foreach y utilizar de parametro "nextPageToken": "CAQQAA"?
pongo un ejemplo para que se me entienda mejor


Código PHP:
Ver original
  1. foreach($pagina as $child_lista){ // $pagina tendria que coger el valor de $pagina = $json_decode_lista->nextPageToken;
  2.                                 $api_json_lista1 = file_get_contents("https://www.googleapis.com/youtube/v3/playlists?channelId=xxxx&key=xxx&maxResults=50&part=snippet&fields=items(snippet(title)),items(id),pageInfo(totalResults),nextPageToken&pageToken={$child_lista}");
  3.                                 $json_decode_lista1 = json_decode($api_json_lista1);
  4.                                $pagina = $json_decode_lista->nextPageToken; // este valor se tendria que pasar de nuevo por el foreach
  5.                                 $lista1 = array();
  6.                                 foreach($json_decode_lista1->items as $child_lista1){ ...................
  7. }
  8. }

este ultimo codigo es para que se me entienda lo que quiero, le faltal alguna cosas
pero la idea es, que al ejecutarse, muestre los primeros 50 resultados, si existe una pagina siguiente, tome ese valor y vuelva a ejecutar el foreach, pero con ese nuevo valor, hasta que liste completamente todos los videos.

gracias y espero que se me entienda.

Última edición por raid_; 28/07/2013 a las 20:31
  #2 (permalink)  
Antiguo 29/07/2013, 01:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: paginacion videos youtube

No entendía hasta que vi un poco de la API

Más o menos tendrías que hacer algo como:
Código PHP:
Ver original
  1. $nextPage = ''; // En la primera llamada no necesitas token
  2. $url = "https://www.googleapis.com/youtube/v3/playlists?channelId=xxxx&key=xxx&maxResults=50&part=snippet&fields=items(snippet(title)),items(id),pageInfo(totalResults)";
  3. while(true) {
  4.     $lista = file_get_contents($url . $nextPage);
  5.     // Aquí haces lo que sea necesario con la lista
  6.     if(/* Revisas si existe token para siguiente página */) {
  7.           // Asignas variable y token a $nextPage
  8.     } else {
  9.           // Si no hay token para siguiente página
  10.           // o hay menos de 50 videos en resultados
  11.           // hay que salir del ciclo
  12.           break;
  13.     }
  14. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 29/07/2013, 12:11
Avatar de raid_  
Fecha de Ingreso: diciembre-2010
Mensajes: 132
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: paginacion videos youtube

Muchas gracias, era lo que necesitaba, pero me da un problema, y es que me duplica el primer resultado


Código PHP:
Ver original
  1. valor 1 <br>
  2. valor 2 <br>
  3. valor 3 <br>
  4. valor 4 <br>
  5. valor 5 <br>
  6. .............
  7.  
  8. valor 1 <br> // este resultado sobra
He probado con if(isset ($nextPage) or empty ($nextPage)), pero solo me devuelve 2 resultados, si lo pongo if(isset ($nextPage) $$ empty ($nextPage)), entra en bucle, y he probado todo lo que se me ocurre, unset(), etc.....

¿que tengo mal en el codigo?



Esto es el codigo que estoy utilizando:
Código PHP:
Ver original
  1. $nextPage = '';
  2. $url = "https://www.xxxxxxxxxxxx.com?nextPageToken&pageToken=";
  3. while(true) {
  4.         $lista = file_get_contents($url . $nextPage);
  5.         $json_decode_lista = json_decode($lista);
  6.  
  7.         foreach($json_decode_lista->items as $child_lista){
  8.  
  9.             $id_lista = $child_lista->id;
  10.             echo ''.$id_lista  . '<br>';
  11.        
  12.         }
  13.  
  14.     if(isset ($nextPage))  {
  15.           $nextPage = $json_decode_lista->nextPageToken;
  16.    
  17.     } else {
  18.           echo 'final <br>';
  19.           break;
  20.     }
  21. }


Se me olvidaba, en la ultima pagina de la consultas, el nextPageToken, solo se muestra, si hay pagina siguiente, no es que no muestre ningun valor, es que nisiquiera muestra esa seccion
  #4 (permalink)  
Antiguo 29/07/2013, 12:45
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: paginacion videos youtube

La variable $nextPage siempre estará definida, se declaró antes del while, lo que debes comparar es si obtuviste menos de 50 videos (lógicamente ya no habrá siguiente página) o algo en ->$nextPageToken te dice que ya es la última página.

Me extraña que repita el primer resultado, tal vez se deba al ciclo infinito.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 29/07/2013, 14:53
Avatar de raid_  
Fecha de Ingreso: diciembre-2010
Mensajes: 132
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: paginacion videos youtube

es es el codigo que muestra la consulta que realizo

Código PHP:
Ver original
  1. {
  2.  "pageInfo": {
  3.   "totalResults": 125
  4.  },
  5.  "nextPageToken": "XXXXX",
  6.  "items": [
  7.   {
  8.    "id": "xxxxxxxxxxxxxxx",
  9.    "snippet": {
  10.     "title": "XXXXXX"
  11.    }
  12.   }
  13.  ]
  14. }

pero en la ultima pagina muestra

[HIGHLIGHT="PHP"]
{
"pageInfo": {
"totalResults": 125
},

"items": [
{
"id": "xxxxxxxxxxxxxxx",
"snippet": {
"title": "XXXXXX"
}
}
]
}
[/HIGHLIGH


no muestra "nextPageToken": "XXXXXX", en la ultima pagina.

Y por lo que se ve recoge toma la variable como vacia, y ejecuta una ultima vez el while, y como el parametro &pageToken= no tiene ningun valor, muestra nuevamente la primera pagina y cierra el bucle al estar el parametro vacio.

EDITO: el valor que devuelve la ultima pagina el NULL, pero sigo en las mismas

voy a probar unas ideas que tengo, y comento los resultados

Última edición por raid_; 29/07/2013 a las 15:26
  #6 (permalink)  
Antiguo 29/07/2013, 17:58
Avatar de raid_  
Fecha de Ingreso: diciembre-2010
Mensajes: 132
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: paginacion videos youtube

Bueno, pues he encontrado una solucion, algo chapucera, pero funciona, si alguien conoce una forma mas "fina" de hacerlo, le agradeceria que lo comentase.

Código PHP:
Ver original
  1. $nextPage = '';
  2. $url = "https://www.xxxxxxxxxxxx.com?nextPageToken&pageInfo&pageToken=";
  3. $i=0;
  4.  
  5.  
  6. while($i <= $paginas) { // le decimos cuantas veces realice el bucle
  7.         $lista = file_get_contents($url . $nextPage);
  8.         $json_decode_lista = json_decode($lista);
  9.        
  10.         // obtenemos el numero total de videos
  11.         $resultado = $json_decode_lista->pageInfo->totalResults;
  12.        
  13.         // el numero de videos lo dividimos por la cantidad de videos que tengamos
  14.         //especificada, por defecto son 25
  15.         // y le restamos 1 para poder eliminar el ultimo bucle, que da de mas
  16.         // y lo pasamos por ceil para obtener un numero entero, redondeando hacia arriba
  17.         $paginas = ceil($resultado / 25 - 1);
  18.        
  19.         $i++;      
  20.         foreach($json_decode_lista->items as $child_lista){
  21.  
  22.             $id_lista = $child_lista->id;
  23.             echo '<br>';
  24.             echo $id_lista;
  25.             echo '<br>';
  26.            
  27.         }
  28.      
  29.        if(isset ($nextPage) )  {
  30.  
  31.           $nextPage = $json_decode_lista->nextPageToken;
  32.  
  33.     }
  34.    
  35. }
  #7 (permalink)  
Antiguo 29/07/2013, 18:45
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: paginacion videos youtube

Insisto, si antes del while ya está declarada $nextPage, siempre entrará a este if:

Código PHP:
Ver original
  1. if(isset ($nextPage) )  {
  2.            $nextPage = $json_decode_lista->nextPageToken;
  3.        }

La cosa debería ser (creo) así:

Código PHP:
Ver original
  1. // empty() devuelve verdadero si no existe la variable
  2.        // o si tiene un valor vacío (NULL, false, 0, etc.)
  3.        if(empty ($json_decode_lista->nextPageToken) )  {
  4.            // No hay token de siguiente página, entonces ya terminamos
  5.            break;
  6.        } else {
  7.            // Si hay token de siguiente página, lo asignamos
  8.            $nextPage = $json_decode_lista->nextPageToken;
  9.         }

Con eso ya no debería haber problema.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 29/07/2013, 19:36
Avatar de raid_  
Fecha de Ingreso: diciembre-2010
Mensajes: 132
Antigüedad: 13 años, 4 meses
Puntos: 12
Respuesta: paginacion videos youtube

joder, que mal me ha sentado el fin de semana.....,

funciona perfecto,

mira que he probado cosas, y mira la solucion complicada que encontre, y al final, algo tan simple...


Muchisimas gracias por tu ayuda

Etiquetas: paginacion, videos, youtube
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:42.