Création d'un article via API suivant exposé de Marc Dechèvre

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Création d'un article via API suivant exposé de Marc Dechèvre

    Bonjour à tous et en particulier à Woluweb.
    J'ai écouté avec beaucoup d'intérêt la vidéo de la conférence qu'a donnée Marc Dechèvre lors du Joomladay 2023 à Metz. J'ai essayé de mettre en pratique son script d'ajout d'un article, mais je n'y arrive pas. J'ai agi ainsi :
    J'ai donc recopié le token d'un super user dans le script (développé plus bas sans le token), j'ai mis l'url de mon site (ici baptisé https://monsite), j'ai intitulé mon script api-post.php et l'ai téléversé dans l'arborescence de mon site. Quand ensuite je tape https://monsite/api/index.php/v1 j'obtiens un message d'erreur 404 title: ressource not found.
    Voici le script :

    <?php
    // Before passing the HTTP METHOD to CURL
    $curl = curl_init();

    $url = 'https://monsite/api/index.php/v1';

    // Put your Joomla! Api token in a safe place, for example a password manager or a vault storing secrets
    // We should not use environment variables to store secrets.
    // Here is why: https://www.trendmicro.com/en_us/res...g-secrets.html
    $token = 'token du super user de monsite';
    $categoryId = 2; // Joomla's default "Uncategorized" Category


    $data = [
    'title' => 'API',
    'alias' => 'api',
    'articletext' => 'I have no idea, et c'est dommage...',
    'catid' => $categoryId,
    'language' => '*',
    'metadesc' => '',
    'metakey' => '',
    ];

    $dataString = json_encode($data);

    // HTTP request headers
    $headers = [
    'Accept: application/vnd.api+json',
    'Content-Type: application/json',
    'Content-Length: ' . mb_strlen($dataString),
    sprintf('X-Joomla-Token: %s', trim($token)),
    ];

    curl_setopt_array($curl, [
    CURLOPT_URL => sprintf('%s/%s',$url,'content/articles'),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => 'utf-8',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $dataString,
    CURLOPT_HTTPHEADER => $headers,
    ]
    );

    $response = curl_exec($curl);
    curl_close($curl);
    echo $response;​

    Quelqu'un peut-il me dire pourquoi ça ne marche pas ? D'avance merci pour votre aide.

  • #2
    Bonjour et merci pour le retour

    Si le script s'appelle
    api-post.php
    et est à la racine du site https://monsite.fr, il faut donc appeler
    https://monsite.fr/api-post.php
    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

    Commentaire


    • #3
      Envoyé par woluweb Voir le message
      Bonjour et merci pour le retour

      Si le script s'appelle
      api-post.php
      et est à la racine du site https://monsite.fr, il faut donc appeler
      https://monsite.fr/api-post.php
      Merci pour la rapidité de ta réponse. J'ai un doute sur l'expression "à la racine": j'ai placé api-post.php dans l'arborescence du site, ç'est-à-dire entre les lignes .htaccess et configuration.php. Est-ce correct? Quand je tape https://monsite.fr/api-post.php j'obtiens une page blanche. Et j'avais cru comprendre que l'url d'appel était https://monsite/api/index.php/v1 (avec laquelel j'obtiens une erreur 404 title: ressource not found
      Dernière édition par olivier834 à 27/07/2023, 11h18

      Commentaire


      • #4
        Bonjour Olivier,

        Etes-vous en local ?

        J'ai eu ce type de souci avec une erreur curl donnant $response vide.

        Pour trouver d'où cela vient, ajoutez une ligne echo 'Curl error: ' . curl_error($curl); avant la ligne echo $response;

        Dans le cas d'un test en local, si vous avez une erreur relative au ssl, ajoutez les lignes :

        Code:
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          Bonjour,

          Ci-après un code qui fonctionne aussi bien en local et en production :

          Code:
          <?php
          // Before passing the HTTP METHOD to CURL
          $curl = curl_init();
          
          $url = 'https://monsite/api/index.php/v1';
          
          // Put your Joomla! Api token in a safe place, for example a password manager or a vault storing secrets
          // We should not use environment variables to store secrets.
          // Here is why: https://www.trendmicro.com/en_us/res...g-secrets.html
          $token = 'token du super user de monsite';
          $categoryId = 2; // Joomla's default "Uncategorized" Category
          
          
          $data = [
          'title' => 'API',
          'alias' => 'api2',
          'articletext' => 'I have no idea', // ===> Marc : suppression de ", et c'est dommage" car l'apostrophe provoque une erreur
          'catid' => $categoryId,
          'language' => '*',
          'metadesc' => '',
          'metakey' => '',
          ];
          
          $dataString = json_encode($data);
          
          // HTTP request headers
          $headers = [
          'Accept: application/vnd.api+json',
          'Content-Type: application/json',
          'Content-Length: ' . mb_strlen($dataString),
          sprintf('X-Joomla-Token: %s', trim($token)),
          ];
          
          curl_setopt_array($curl, [
          CURLOPT_URL => sprintf('%s/%s&%s',$url,'content/articles','token='.$token),
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => 'utf-8',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 30,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS => $dataString,
          CURLOPT_HTTPHEADER => $headers,
          ]
          );
          curl_setopt($curl, CURLOPT_URL, sprintf('%s/%s',$url,'content/articles'));
          
          if (parse_url($url, PHP_URL_HOST) == 'localhost') { // localhost ?
          ​    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
              curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
          }
          $response = curl_exec($curl);
          curl_close($curl);
          if (!$response) // no response : display curl error
              echo 'Curl error: ' . curl_error($curl);
          else
               echo $response;
          ​
          Pascal
          Dernière édition par pmleconte à 28/07/2023, 10h30
          woluweb aime ceci.
          If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

          Commentaire


          • #6
            Merci Pascal, d'avoir pris la peine de me répondre. J'ai fait deux tentatives, en production et en local (wamp).
            En production, après avoir téléversé le script nommé api-post2.php (complété avec le nom du site et le token) quand ensuite j'ai tapé monsite/api-post2.php, j'ai obtenu une page blanche.
            En local, après avoir adapté le script au site d'URL localhost/Joomla7/api/index.php/v1 et au nouveau token, quand j'ai tapé localhost/Joomla7/api-post2.php j'ai obtenu un message d'alerte : ( ! ) Parse error: syntax error, unexpected identifier "curl_setopt" in C:\wamp64\www\Joomla7\api-post2.php on line 50. Cette ligne correspondant à la ligne curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

            Visiblement, je n'ai pas tout bien fait. Mais où sont les erreurs?

            Commentaire


            • #7
              Bonjour

              Il semble que curl n'est pas encore installé sur ta machine locale.

              Voici un lien stackoverflow: https://stackoverflow.com/questions/...l-in-php-xampp

              Bonne journée
              woluweb aime ceci.
              Christophe (cavo789)
              Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
              Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

              Commentaire


              • #8
                Envoyé par cavo789 Voir le message
                Bonjour

                Il semble que curl n'est pas encore installé sur ta machine locale.
                Je viens de vérifier les extension PHP de mon wamp et curl est bien coché et pourtant ça ne fonctionne pas.
                Dernière édition par olivier834 à 30/07/2023, 08h24

                Commentaire


                • #9
                  Personne n'aurait une autre idée pour orienter mes recherches ? Page blanche en réponse à mon script chez Ionos et message d'erreur sur Wamp...

                  Commentaire


                  • #10
                    As-tu cherché à garantir que curl est bien installé ? Un petit script quelconque qui ferait un curl et qui serait fonctionnel ?
                    Christophe (cavo789)
                    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                    Commentaire


                    • #11
                      Envoyé par cavo789 Voir le message
                      As-tu cherché à garantir que curl est bien installé ? Un petit script quelconque qui ferait un curl et qui serait fonctionnel ?
                      excellente idée. Aurais-tu un script simple à me suggérer ?

                      Commentaire

                      Annonce

                      Réduire
                      Aucune annonce pour le moment.

                      Partenaire de l'association

                      Réduire

                      Hébergeur Web PlanetHoster
                      Travaille ...
                      X