Changeset 92545 in spip-zone


Ignore:
Timestamp:
Oct 30, 2015, 11:08:32 AM (4 years ago)
Author:
cedric@…
Message:

un filtre |twitter_joli_tweet a appliquer sur le texte d'un tweet pour le mettre en forme et transformer mentions, hashtags et URLs en liens

Location:
_plugins_/twitter/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/twitter/trunk/paquet.xml

    r91569 r92545  
    22        prefix="twitter"
    33        categorie="communication"
    4         version="1.3.6"
     4        version="1.4.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
  • _plugins_/twitter/trunk/twitter_fonctions.php

    r73576 r92545  
    6868}
    6969
    70 ?>
     70
     71/**
     72 * Afficher un tweet avec les liens (hashtag, mentions, urls)
     73 * @param string $texte
     74 * @param bool|false $is_backend
     75 * @return string
     76 */
     77function twitter_joli_tweet($texte,$is_backend=false){
     78        defined('_EXTRAIRE_TW_LIENS') || define('_EXTRAIRE_TW_LIENS', ',' . '\[[^\[\]]*(?:<-|->).*?\]' . '|<a\b.*?</a\b' . '|<\w.*?>' . '|((?:https?:/|www\.)[^"\'\s\[\]\}\)<>]*)' .',imsS');
     79
     80        // si c'est un tweet qui vient du flux RSS il commence par le twitter user qu'on enleve
     81        if ($is_backend){
     82                $texte = preg_replace(",^\w+:\s,","",$texte);
     83        }
     84
     85        // les autoliens
     86        $texte = preg_replace_callback(_EXTRAIRE_TW_LIENS,"twitter_filtre_autolinks",$texte);
     87        // les liens vers les compte
     88        if (strpos($texte,"@")!==false){
     89                $texte = preg_replace_callback(",(@\w+)\b(?!…),u","twitter_filtre_user_link",$texte);
     90        }
     91        if (strpos($texte,"#")!==false){
     92                $texte = preg_replace_callback(",(#\w+)\b(?!…),u", "twitter_filtre_hash_link", $texte);
     93        }
     94
     95        return $texte;
     96}
     97
     98/**
     99 * Remplacer les mentions par un lien vers la page de l'user mentionne
     100 * @param $m
     101 * @return mixed|string
     102 */
     103function twitter_filtre_user_link($m){
     104        $user = reset($m);
     105        $user = ltrim($user,"@");
     106        $user = "<a href=\"https://twitter.com/$user\" target='_blank'>@$user</a>";
     107        return $user;
     108}
     109
     110/**
     111 * Remplacer les hashtags par un lien vers la page hashtag chez twitter
     112 * @param $m
     113 * @return mixed|string
     114 */
     115function twitter_filtre_hash_link($m){
     116        $hash = reset($m);
     117        $hash = ltrim($hash,"#");
     118        if (is_numeric($hash))
     119                return $m[0];
     120        $hash = "<a href=\"https://twitter.com/hashtag/$hash?src=hash\" target='_blank'>#$hash</a>";
     121        return $hash;
     122}
     123
     124/**
     125 * Remplacer l'URL short du tweet par un lien vers l'URL short mais en affichant une version lisible
     126 * de la vrai URL
     127 *
     128 * @param $m
     129 * @return string
     130 */
     131function twitter_filtre_autolinks($m){
     132
     133        $link = $m[0];
     134        if (strpos($link,"&#8230;")!==false OR strpos($link,"…")!==false)
     135                return $link;
     136
     137        $dir = sous_repertoire(_DIR_CACHE,"twitter-links");
     138        $fichier_cache = $dir.md5($link)."txt";
     139        lire_fichier($fichier_cache,$target);
     140        if (!$target OR _request('var_mode')=='recalcul'){
     141                $target = $link;
     142                include_spip("inc/distant");
     143                for ($i = 0; $i<10; $i++){
     144                        $res = recuperer_lapage($target, false, "HEAD", 0);
     145                        if (!$res) return $link;
     146                        if (is_array($res)){
     147                                break;
     148                        }
     149                        $target = $res;
     150                }
     151                // ici $target est la vraie url finale, $link est l'url raccourcie
     152                $target = ltrim(protocole_implicite($target), "//");
     153                if (strncmp($target, "www.", 4)==0)
     154                        $target = substr($target, 4);
     155
     156                if (strlen($target)>40){
     157                        $target = explode("/", $target);
     158                        $first = array_shift($target);
     159                        $target = implode("/", $target);
     160                        $target = $first . "/" . couper(substr($target, 0, -10), 10, "") . "…" . substr($target, -10);
     161                }
     162
     163                // on cache
     164                ecrire_fichier($fichier_cache, $target);
     165        }
     166
     167        return "<a href=\"$link\" target='_blank'>$target</a>";
     168}
Note: See TracChangeset for help on using the changeset viewer.