(array) n'est pas suffisant pour convertir l'objet récupéré par l'itérateur YQL #3325

Closed
opened 8 years ago by severo · 3 comments
severo commented 8 years ago

Selon mes petits tests (sur SPIP 2.1.16 avec plugin iterateurs, mais le code n'a pas changé semble t il dans le core), la conversion à array, à la ligne: http://core.spip.org/projects/spip/epository/entry/spip/ecrire/iterateur/data.php#L563 n'est pas suffisant. Le problème et la solution sont décrits la: http://www.phpro.org/examples/Convert-Object-To-Array-With-PHP.html.

Je pense qu'il faut appliquer une conversion récursive.

Le bout de code qui ne fonctionne pas sans cette conversion récursive, et qui fonctionne si on applique la solution mentionnée plus haut :


<BOUCLE_youtube(DATA)
{source yql, "select * from youtube.user.videos where id='UCXkC7ObD_7PCeU_HLwsK5oQ'"}
{datapath query/results/}>
  • #VALEUR{title}

  • </BOUCLE_youtube>

    Selon mes petits tests (sur SPIP 2.1.16 avec plugin iterateurs, mais le code n'a pas changé semble t il dans le core), la conversion à array, à la ligne: http://core.spip.org/projects/spip/epository/entry/spip/ecrire/iterateur/data.php#L563 n'est pas suffisant. Le problème et la solution sont décrits la: http://www.phpro.org/examples/Convert-Object-To-Array-With-PHP.html. Je pense qu'il faut appliquer une conversion récursive. Le bout de code qui ne fonctionne pas sans cette conversion récursive, et qui fonctionne si on applique la solution mentionnée plus haut :<pre> <BOUCLE_youtube(DATA) {source yql, "select * from youtube.user.videos where id='UCXkC7ObD_7PCeU_HLwsK5oQ'"} {datapath query/results/}> <li>#VALEUR{title}</li> </BOUCLE_youtube> </pre>
    Poster

    L'URL est mal écrite, c'est : http://core.spip.org/projects/spip/repository/entry/spip/ecrire/iterateur/data.php#L563.

    J'ai pas le dépôt SVN sous la main, mais le patch en gros pourrait être remplacer à la ligne 547


    /**

    • yql -> tableau
    • `throws Exception
    • `param string $u
    • `return array|bool
      /
      function inc_yql_to_array_dist($u) {
      define('_YQL_ENDPOINT', 'http://query.yahooapis.com/v1/public/yql?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q=');
      $v = recuperer_url($url = _YQL_ENDPOINT.urlencode($u).'&format=json');
      if (!$v['page']
      OR !$w = json_decode($v['page'],true)) {
      throw new Exception('YQL: réponse vide ou mal formée');
      }
      if (isset($w['error'])){
      throw new Exception($w['error']['description']);
      }
      return (array) $w;
      }
    par

    /
    *
  • Convert an object to an array
  • `param object $object The object to convert
  • `return array
  • if( !is_object( $object ) && !is_array( $object ) ) {
    return $object;
    }
    if( is_object( $object ) ) {
    $object = get_object_vars( $object );
    }
    return array_map( 'inc_object_to_array', $object );
    }
  • /**

    • yql -> tableau
    • `throws Exception
    • `param string $u
    • `return array|bool
      */
      function inc_yql_to_array($u) {
      define('_YQL_ENDPOINT', 'http://query.yahooapis.com/v1/public/yql?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q=');
      $v = recuperer_page($url = _YQL_ENDPOINT.urlencode($u).'&format=json');
      $w = json_decode($v);
      if (!$w) {
      throw new Exception('YQL: réponse vide ou mal formée');
      return false;
      }
      return inc_object_to_array($w);
      }
    L'URL est mal écrite, c'est : http://core.spip.org/projects/spip/repository/entry/spip/ecrire/iterateur/data.php#L563. J'ai pas le dépôt SVN sous la main, mais le patch en gros pourrait être remplacer à la ligne 547<pre> /** * yql -> tableau * `throws Exception * `param string $u * `return array|bool */ function inc_yql_to_array_dist($u) { define('_YQL_ENDPOINT', 'http://query.yahooapis.com/v1/public/yql?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q='); $v = recuperer_url($url = _YQL_ENDPOINT.urlencode($u).'&format=json'); if (!$v['page'] OR !$w = json_decode($v['page'],true)) { throw new Exception('YQL: r&#233;ponse vide ou mal form&#233;e'); } if (isset($w['error'])){ throw new Exception($w['error']['description']); } return (array) $w; } </pre>par<pre> /** * * Convert an object to an array * * `param object $object The object to convert * `return array * */ function inc_object_to_array( $object ) { if( !is_object( $object ) && !is_array( $object ) ) { return $object; } if( is_object( $object ) ) { $object = get_object_vars( $object ); } return array_map( 'inc_object_to_array', $object ); } /** * yql -> tableau * `throws Exception * `param string $u * `return array|bool */ function inc_yql_to_array($u) { define('_YQL_ENDPOINT', 'http://query.yahooapis.com/v1/public/yql?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q='); $v = recuperer_page($url = _YQL_ENDPOINT.urlencode($u).'&format=json'); $w = json_decode($v); if (!$w) { throw new Exception('YQL: r&#233;ponse vide ou mal form&#233;e'); return false; } return inc_object_to_array($w); } </pre>
    Owner

    Version cible mise à 3.1
    Statut changé à Fermé

    **Version cible mise à 3.1** **Statut changé à Fermé**
    Poster

    Reporté dans le plugin Iterateurs - http://zone.spip.org/trac/spip-zone/changeset/85762/plugins/iterateurs

    Reporté dans le plugin Iterateurs - http://zone.spip.org/trac/spip-zone/changeset/85762/_plugins_/iterateurs
    Sign in to join this conversation.
    No Milestone
    No project
    No Assignees
    2 Participants
    Notifications
    Due Date

    No due date set.

    Dependencies

    This issue currently doesn't have any dependencies.

    Loading…
    There is no content yet.