2010-12-01 24 views
1

J'ai trouvé quelques extracteurs de mots-clés pour les chaînes de requête, mais ils semblent tous être obsolètes (utilisez du code obsolète ou tout simplement ne fonctionnent pas).Extracteur de mots clés pour les chaînes de requête

Est-ce que quelqu'un connaît un extracteur de chaîne de requête PHP. Ou comment pourrais-je construire une fonction qui prend un "hôte" comme "amazon.com" et les noms de plusieurs paramètres de requête et renvoie les valeurs de ces paramètres?

Par exemple, http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=a+tale+of+two+cities&x=0&y=0

Si je fournis "amazon.com" et "champ-keywords" comment puis-je obtenir le tableau: ['a','tale','of','two','cities']?

Merci d'avance !!

Précision

réponse de Jose couvre mon exemple pour Amazon, mais ne semble pas fonctionner pour une autre URL:

http://www.bing.com/search?q=Christmas+Around+The+World&form=QBLH&qs=PN&sk=HS1PN4&pq=&sp=6&sc=8-0

http://search.yahoo.com/search;_ylt=AnQN0c997QR5SIYcYt.h2YCbvZx4?p=golf&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-701

Répondre

1

Vous (I) pourriez en écrire un.

function getValueFromDomain($urls, $domain, $key) { 
    foreach ($urls as $url) { 
     if (preg_match('/https?:\/\/[^\/]*?' . preg_quote($domain) . '\//', $url)) { 
      parse_str(substr($url, strpos($url, '?') + 1), $output); 
      if (isset($output[$key])) { 
       $array = explode(' ', $output[$key]); 
       return $array; 
      } 
     } 
    } 
    return array(); 
} 

Juste un peu de code de vol de @ réponse de Jose :)

Mise à jour: testé, ne fonctionne pas, fixe, fonctionne.

Mise à jour 2: n'a pas fonctionné après tout, testé, corrigé, fonctionne.

Mise à jour 3: Ajout du support pour HTTPS

+0

Oh hey @Jonah! Désolé, je n'ai pas vu que vous avez mis à jour. Le problème avec celui-ci (si je comprends bien) est que si la clé que je cherche ne vient pas directement après le '?' (par exemple s'il y a plusieurs clés), il ne sera pas défini. Vrai? – Kyle

+0

Non, cela fonctionne parfaitement. Je disais que c'était un problème avec la solution de Jose. – Jonah

+0

@Jonah, '$ url = http://query.nytimes.com/search/sitesearch?date_select=full&query=tiger&type=nyt&x=0&y=0 parse_str (substr ($ url, strpos ($ url, '?') + 1), $ output); ' $ sortie retourne' {"date_select": "full"} ' – Kyle

1

Cela devrait le faire ..

<?php 
    $str = "http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=a+tale+of+two+cities&x=0&y=0"; 
    parse_str($str, $output); 
    $array = explode(" ",$output['field-keywords']); 
    print_r($array); 

?> 
+1

Bonne , mais le PO veut être capable de rechercher un tableau d'URL pour un domaine spécifique, et en tirer la valeur. À mi-chemin. – Jonah

+0

@Emile: essayez 'parse_url()' à la place: se.php.net/manual/fr/function.parse-url.php – chelmertz

+0

J'aime cette réponse, mais elle ne fonctionne pas pour les autres URL à part l'exemple d'amazon. J'ai fourni un exemple de bing et de yahoo ci-dessus. Une idée pourquoi? – Kyle

0

La façon dont je lis la question, vous auriez seulement besoin du nom d'index de chaîne de requête à transmettre à la fonction comme ...

function get_keywords($parameter){ 
     $words = explode(" ", $_GET[$parameter]); 
     return $words; 
}