Closed jerrywham closed 11 years ago
Hips, miaou ! ^^ bon conseil , j'ai fait la modif...
C'est mieux ! Merci. Nouvelle remarque : le bookmarklet fonctionne mais pas avec du code partagé avec snippetvamp. J'en veux pour preuve ton article avec l'ajout http à une url. N'est-il pas possible dans ces conditions que, plutôt que de parser la page d'origine, parser la page dont l'url est dans l'iframe ?
Oui, ce serait plus logique... je
l'ajouterai: le temps de réfléchir à la regex ^^ (ouille)
Je te propose ça :
function parse_for_snippet($url){
$page=@file_get_contents(trim($url));
if ($page===false){return false;}
pregmatch('#<iframe(.)src="(.[^\s])"(.)>#',$page,$iframe);
if(isset($iframe[2])) {$page=@file_get_contents(trim($iframe[2]));
if ($page===false){return false;}
preg_match('#<h3>([^<]+)</h3>#', $page , $title);
if (isset($title[1])){$title=$title[1];}else{$title='';}
preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
preg_matchall('#<pre[^>]>([^<]+)</pre>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
return false;
}else {
preg_match('#<title>([^<]+)</title>#', $page , $title);
if (isset($title[1])){$title=$title[1];}else{$title='';}
preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
preg_match_all('#<pre[^>]*>([^<]+)</pre>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
return false;
}
}
C'est fou ! je suis en train de commit la version que j'ai faite: on est sur la même longueur d'onde ^^ je te montre où j'en suis et pourquoi :
function parse_for_snippet($url){ $page=@file_get_contents(trim($url)); if ($page===false){return false;} if (preg_match('#
if ($admin&&isset($_GET['txt'])&&isset($snippets[$_GET['txt']])||isset($_GET['txt'])&&isset($snippets[$_GET['txt']])&&is_public($_GET['txt'])){exit(htmlspecialchars('#'.$snippets[$_GET['txt']]['#titre']."\n".'#'.$snippets[$_GET['txt']]['#adresse']."\n\n".$snippets[$_GET['txt']]['#contenu']."\n\n"));}
Du coup, la fonction se contente de récupérer les adresses contenant un snippetvamp.php?embed=nb puis change le embed en txt et typiak la version txt directement... puis agglomère le tout... Qu'en penses-tu ?
C'est pas con de chercher directement dans les url la valeur snippetvamp. Mais tu peux pas toutes les matcher vu que tu n'ouvres qu'une fenêtre au final. Quel est le code qui sera récupéré s'il y a plusieurs codes embed sur une même page ?
Voici une version améliorée de ce que j'ai proposé toute à l'heure :
function parse_for_snippet($url){
$page=@file_get_contents(trim($url));
if ($page===false){return false;}
pregmatch('#<iframe(.)src="(.[^\s])"(.)>#',$page,$iframe);
if(isset($iframe[2])) {$Page = $page;$page=@file_get_contents(trim($iframe[2]));
if ($page!==false){
preg_match('#<h3>([^<]+)</h3>#', $page , $title);
} else {
$page = $Page;
preg_match('#<title>([^<]+)</title>#', $page , $title);
}
} else {preg_match('#<title>([^<]+)</title>#', $page , $title);}
if (isset($title[1])){$title=$title[1];}else{$title='';}
preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
preg_match_all('#<pre[^>]*>([^<]+)</pre>#', $page , $code_blocs);
if (count($code_blocs[1])>0){$code_blocs[1]['title']=trim($title);return $code_blocs[1];}
return false;
}
Je vais voir ce que donne ta version...
Justement, il parse à la recherce des
url et les charge les unes après les autres...
Je garde la tienne pour la regarder de plus près avec la colo
syntaxique ^^
Le 11/05/2013 15:54, jerrywham a écrit :
C'est pas con de chercher directement dans les url la valeur
snippetvamp. Mais tu peux pas toutes les matcher vu que tu
n'ouvres qu'une fenêtre au final. Quel est le code qui sera
récupéré s'il y a plusieurs codes embed sur une même page ?
Voici une version améliorée de ce que j'ai proposé toute à
l'heure :
function parse_for_snippet($url){
$page=@file_get_contents(trim($url));
if ($page===false){return false;}
preg_match('#<iframe(.)src="(.[^\s])"(.*)>#',$page,$iframe); if(isset($iframe[2])) {$Page = $page;$page=@file_get_contents(trim($iframe[2])); if ($page!==false){ preg_match('#
Ta fonction récupère bien le code et l'url mais pas les titres qui sont des h3 dans la version embed.
Les titres ne pourraient pas être
cumulés dans la case titre du formulaire, du coup ils sont ajoutés
en commentaires dans le code...
Je pense que, dans le cas où un seul snippet est trouvé, je
complèterai la case titre du form...
Le 11/05/2013 15:57, jerrywham a écrit :
Ta fonction récupère bien le code et l'url mais pas les titres
qui sont des h3 dans la version embed.
—
Reply to this email directly or view
it on GitHub.
Ou en prenant le titre de la page principale et en ajoutant comme tu le fais les sous-titre dans le code ???
En faisant :
function parse_for_snippet($url){ $page=@file_get_contents(trim($url)); if ($page===false){return false;} if (preg_match('#<title>([^<]+)</title>#', $page , $title)){$title=$title[1];}else{$title='';} if (preg_matchall('#<code[^>]>([^<]+)</code>#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} if (preg_matchall('#<pre[^>]>([^<]+)</pre>#', $page , $code_blocs)){$code_blocs[1]['title']=trim($title);return $code_blocs[1];} // scan for embeded snippets and load each snippet if (preg_matchall('#(http[s]:\/\/[^ ]_snippetvamp.php\?embed=[0-9a-z]+)#', $page , $code_blocs)){ $code=array();$code['title']=trim($title); foreach($code_blocs[0] as $link){$code[]=file_get_contents(str_replace('?embed=','?txt=',$link));} return $code; } return false; if ($admin&&isset($_GET['txt'])&&isset($snippets[$_GET['txt']])||isset($_GET['txt'])&&isset($snippets[$_GET['txt']])&&is_public($_GET['txt'])){ echo '<pre>';print_r($_GET);echo'</pre>'; $title=htmlspecialchars($snippets[$_GET['txt']]['#titre']);htmlspecialchars('#'.$snippets[$_GET['txt']]['#titre']."\n".'#'.$snippets[$_GET['txt']]['#adresse']."\n\n".$snippets[$_GET['txt']]['#contenu']."\n\n");return false;} }
Le 11/05/2013 16:11, jerrywham a
écrit :
Ou en prenant le titre de la page principale et en ajoutant
comme tu le fais les sous-titre dans le code ???
—
Reply to this email directly or view
it on GitHub.
ha oui, pas con !!
Tu as mis à jour le fichier principal mais pas le fichier de version. Il y a donc un message disant de mettre à jour vers la version 0.8b alors que tu as mis en ligne la v1.0.
Le 11/05/2013 17:14, jerrywham a
écrit :
Tu as mis à jour le fichier principal mais pas le fichier de
version. Il y a donc un message disant de mettre à jour vers la
version 0.8b alors que tu as mis en ligne la v1.0.
—
Reply to this email directly or view
it on GitHub.
Tout à fait curieux vu que j'ai actualisé le fichier en
question... tu as essayé de te logguer ? il se peut que ça soit
une page mise en cache ^^ (si tu savais le nb de fois où j'ai
enragé devant l'absence d'effet de mes modifs avant de
m'apercevoir que j'avais pas vidé le cache !!! big noob fail ^^ )
Si tu te loggues, il n'utilise pas le cache (et il le vide)
C'est rentré dans l'ordre...
Le 11/05/2013 19:48, jerrywham a
écrit :
C'est rentré dans l'ordre...
—
Reply to this email directly or view
it on GitHub.
cool
Le 11/05/2013 19:48, jerrywham a
écrit :
C'est rentré dans l'ordre...
—
Reply to this email directly or view
it on GitHub.
Du coup, essaie le copier coller de snippet pour voir ? (si ça se
trouve, c'est ma version qui fait ça)
J'ai pas de problème à ce niveau là. Si le code a plusieurs lignes, le copier/coller se fait également sur plusieurs lignes. De toute façon, ça dépend de l'éditeur et non de snippetvamp. Y a pas grand chose à faire...
à part utiliser le bouton text only ^^
L'input du mot de passe est visible sur la fenêtre du bookmarklet. Est-ce normal mon capitaine ???
J'ai rien dit, c'est corrigé...
Je viens de tester le bookmarklet. Bien pratique ! Deux remarques cependant :