Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour,

Je viens de passer une journée à un créé un flux rss sur un site en vue de l'afficher sur un autre. Je suis parvenu a afficher le contenu d'une catégorie ( http://www.cap-sizun.com/cap,petites-annonces,nautisme.htm ) sur un site en rapport direct avec cette catégorie ( http://www.voile-capsizun.com/cncs,petites-annonces.html ), avec magpierss ce qui est déjà un exploit :fete: .

Le hic c'est que je souhaite également afficher les vignettes présentes dans la catégorie "source", ces vignettes devant être "agrandissables".

J'ai biensur fait quelques recherches à ce sujet et j'ai trouvé une balise nommée enclosure et donc la syntaxe serait la suivante:

<enclosure url="http://www.cap-sizun.com/photos/pa-64-vends-hobbie-cat-18-t.jpg" length="12216320" type="image/jpeg" />

Mes questions sont donc les suivante:

- Est-ce la fonction que je dois utiliser pour afficher l'imagette "agrandissable" ?

- Si oui, comment calculer à la volée la taille de l'image ? puisque l'attribut length est obligatoire

- Si oui, ou placer la destination d'un clic sur l'image ? Puis ajouter un attribut link ?

J'espère que ces quelques questions ne sont pas trop idiotes, je débute en rss et j'avoue avoir déjà pas mal galéré pour en arriver là).

Quand je vois ensuite que RSS signifie Really Simple Syndication :boude:

Merci pour votre aide,

Loïc.

Modifié par Cleden
Posté

Bonjour,

Really Simple Syndication c'est pour tes utilisateurs ;) Tu as la tâche de leur simplifier la vie :)

Concernant la syntaxe de <enclosure> c'est juste, la syntaxe est correcte.

L'attribut length est obligatoir selon la norme RSS 2.0, mais la moajorité des lecteurs de flux n'en on pas besoin, beaucoup de flux ne l'utilisent pas.

Malheureusement <enclosure> permet d'afficher une image (ou donner le lien vers cette image si le client ne permet pas l'affichage), donc ton fichier doit avoir les bonne dimensions (de préférence pas trop grande pour ne pas gaspiller ta bande passante, vu que le flux est visité souvent) et tu ne peux pas y apposer de lien. L'idée étant qu'en voyant ta miniature la personne suivra le lien vers ton article/page et y retrouvera une image de taille normale.

Pour le calcul de la taille de l'image à la volée tu as une fonction native à PHP appelée filesize qui retourne la taille d'un fichier en bytes (octets) directement, comme tu connais le chemin de ton image il suffit de lui donner celui ci en paramtère à cette fonction et tu n'a plus qu'à afficher ce qu'elle aura retourné.

Bonne chance !

Posté

Merci pour cette réponse.

Avec votre ton aide, je suis parvenu à afficher tout mon flux y compris les vignettes sur la page http://www.voile-capsizun.com/cncs,petites-annonces.html

Parcontre, je ne suis pas parvenu à utiliser la fonction filesize(), il semblerait que celle ci ne peut pas s'utiliser sur des images distantes. J'ai utilisé une valeur bidon pour l'attribut length pour l'instant.

Quelqu'un connaitrait-t-il un fonction équivalente à filesize() mais utilisable pour des fichiers distants ?

Merci d'avance,

Loïc.

Posté (modifié)

Il n'existe pas de fonction native à PHP pour effectuer ceci. Mais la librairie cURL permet de récupérer entre autres les en-têtes HTTP d'une requête sur une URL.

ATTENTION, vérifie que cURL soit bien disponible, sinon cette fonction sera inutilisable (tu peux voir ceci en utilisant la fonction phpinfo() sous la rubrique "curl").

Voici un bout de code qui fait ce dont on parle (trouvé sur la page du manuel de filesize et donc ce code n'est pas de moi) :

<?php
/*
* (mixed)remote_filesize($uri,$user='',$pw='')
* returns the size of a remote stream in bytes or
* the string 'unknown'. Also takes user and pw
* incase the site requires authentication to access
* the uri
*/
function remote_filesize($uri,$user='',$pw='')
{
// start output buffering
ob_start();
// initialize curl with given uri
$ch = curl_init($uri);
// make sure we get the header
curl_setopt($ch, CURLOPT_HEADER, 1);
// make it a http HEAD request
curl_setopt($ch, CURLOPT_NOBODY, 1);
// if auth is needed, do it here
if (!empty($user) && !empty($pw))
{
$headers = array('Authorization: Basic ' . base64_encode($user.':'.$pw));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
$okay = curl_exec($ch);
curl_close($ch);
// get the output buffer
$head = ob_get_contents();
// clean the output buffer and return to previous
// buffer settings
ob_end_clean();

// gets you the numeric value from the Content-Length
// field in the http header
$regex = '/Content-Length:\s([0-9].+?)\s/';
$count = preg_match($regex, $head, $matches);

// if there was a Content-Length field, its value
// will now be in $matches[1]
if (isset($matches[1]))
{
$size = $matches[1];
}
else
{
$size = 'unknown';
}

return $size;
}
?>

Cela inclut aussi l'Authentification Basic HTTP, si tu n'en a pas besoin, libre à toi de modifier cette fonction ;)

A la rigeur tu peux alier cette fonction avec filesize, si tu as des fichiers externes à ton site et d'autres internes, à toi de voir.

Modifié par TheRec

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...