PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

nIQnutn : Afficher vos liens favoris sur votre site

mardi 19 janvier 2016 à 08:43

Il existe de nombreux outils pour partager ses liens favoris. L'un des meilleurs reste certainement Shaarli, Qwant permet également de publier des Carnets publics et il en existe de nombreux autres.

Ces solutions sont toutes intéressantes mais aucune ne permet d'intégrer facilement ses favoris sur son site web. J'ai pourtant trouvé une solution efficace pour intégrer tous mes favoris sur le site.

Cette solution nécessite seulement l'utilisation de PHP et un fichier au format Netscape bookmark contenant les liens.

Pour commencer, il faut exporter les liens depuis Shaarli. Rien de plus facile, il suffit de se rendre sur l'URL http://shaarli.chezmoi.com/?do=export&what=public (pour l'export des liens publics uniquement).

Ce fichier est structuré comme ceci:

bookmarks_shaarli.txt


Bookmarks

Bookmarks

Lien 1
Description du lien 1
Lien 2
Description du lien 2

On retrouve toutes les informations: le titre du lien, son URL, sa description, sa date de création, les tags associés et l'attribut privé.

Il faut maintenant l'afficher sur une page. Le code est assez basique et grandement inspiré par celui de Shaarli.

bookmark.php
> Emplacement du fichier
$urlBase= "/data/documents/0007/bookmark.php" ; // A MODIFIER >> URL de la page
$nb_elem_per_page = intval(5) ; // A MODIFIER >> Nb de liens à afficher


$url=preg_replace('/(^.*?)\\?/', '', $urlBase."?page") ; //  Variable  de la page à récupérer
$urlGet=$urlBase."?page"; // URL pour la navigation
$data=file_get_contents($file); // Récupère le contenu du fichier
$dateFile= date("d/m/Y", filemtime($file)) ; // Date du fichier
$type='unknown'; // Type du fichier


// Fonction startsWith
function startsWith($haystack,$needle,$case=true)
{
    if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);}
    return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0);
}

// Fonction endsWith
function endsWith($haystack,$needle,$case=true)
{
    if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);}
    return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);
}


if (startsWith($data,''))  $type='netscape'; // Vérification du type de fichier: Netscape bookmark

// Si le fichier est au format Netscape bookmark, on parcourt le fichier
if ($type=='netscape') 
{ 

    $data =  (explode('
',$data)) ; // Retourne un tableau avec pour chaque entrée les liens (Titre + Description + ...) $page_nb = isset($_GET[$url])?intval($_GET[$url]):1; // Numero de la page $number_of_pages = intval(count($data)/$nb_elem_per_page)+1; // Nombre de pages total $page = isset($_GET[$url])?intval($_GET[$url]-1):0; // Parcourt les liens depuis le XXX jusqu'au XXX foreach (array_slice ($data, $page*$nb_elem_per_page, $nb_elem_per_page) as $html) { $link = array('linkdate'=>'','title'=>'','url'=>'','description'=>'','tags'=>'','private'=>0); $d = explode('
',$html); // Retourne un tableau avec le lien (+ attibuts) et la description if (startswith($d[0],'(.*?)!i',$d[0],$matches); $link['title'] = (isset($matches[1]) ? trim($matches[1]) : ''); $link['title'] = html_entity_decode($link['title'],ENT_QUOTES,'UTF-8'); // Récupère le titre $raw_add_date=0; preg_match_all('! ([A-Z_]+)=\\"(.*?)"!i',$html,$matches,PREG_SET_ORDER); // Récupère les attributs et les valeurs contenu dans le lien foreach($matches as $m) { $attr=$m[1]; $value=$m[2]; // attribut et valeur if ($attr=='HREF') $link['url']=html_entity_decode($value,ENT_QUOTES,'UTF-8'); // Récupère le lien elseif ($attr=='TAGS') $link['tags']=html_entity_decode(str_replace(',',' ',$value),ENT_QUOTES,'UTF-8'); // Récupère les Tags elseif ($attr=='PRIVATE') $link['private']=($value=='0'?0:1); // Récupère l'attibut Privé / Public elseif ($attr=='ADD_DATE') $raw_add_date=intval($value); $link['linkdate']=date("d/m/Y",$raw_add_date); // Récupère la date } // On affiche les liens if ($link['private'] == 0 ) { echo "

".$link['title']."

".$link['description']."

Tags: ".$link['tags']."
Date: ".$link['linkdate']."


" ; } elseif ($link['private'] == 1 ) { echo "Lien privé
"; } } } echo "

Mis à jour le: ". $dateFile."

"; // Affiche la date du fichier // Pagination } // Message d'erreur si le format du fichier n'est pas Netscape bookmark else { echo " File has an unknown file format. Nothing to read."; } ?>

On pourrait afficher tous les résultats d'un coup mais je préfère ajouter un menu de navigation. Pour ajouter ce menu, il suffit d'ajouter le code ci-dessous.

menu de navigation
// Pagination
echo "
"; $previous=( $page_nb > 1) ? "Précédent |  " : "" ; echo $previous; for($i=1;$i<=$number_of_pages;$i++) { echo " ". $i ." " ; } $next=( $page_nb != $number_of_pages ) ? " | Suivant " : "" ; echo $next; echo "
";

Voici le résultat sur la page des Liens en vrac et un autre page de test bookmark.php.

Je laisse encore un lien vers Shaarli pour ceux qui préfèrent son interface et bénéficier de ses différentes options, notamment la recherche et tri par tag.

Pour le moment, le code permet d'afficher les fichiers exporter depuis Shaarli et éventuellement les autres fichiers de type Netscape bookmark mais ne doivent pas intégrer d'autres balises ni de listes imbriqués.
J'essaierai de faire une mise à jour pour avoir un truc plus universel et plus complet. Cela offrira la possibilité d'utiliser l'export de ses favoris depuis Firefox.

Ressources


2016 nIQnutn CC-BY

Gravatar de nIQnutn
Original post of nIQnutn.Votez pour ce billet sur Planet Libre.