2012-05-07 1 views
1

Bon, voici ce que je vais faire.Vous voulez extraire l'adresse de la rue à partir d'un iframe intégré de Google Maps

En arrière-plan: Je modifie un site Web WordPress existant créé par quelqu'un d'autre. Ils ont créé une zone de texte dans laquelle le client copie et colle un iframe incorporé pour une carte Google. C'est pour les propriétés que le client publie sur son site Web.

Le dilemme: Tout cela est bien beau, mais je reconstruire la page de détail pour leurs propriétés et je veux dépouiller toutes les informations iframe et ne laisser que l'adresse de la propriété afin que je puisse l'utiliser pour créer une nouvelle carte via un plugin jQuery Google Maps V3.

Je veux tourner ceci:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small> 

Dans ceci:

5475 NW 75 AVE, Ocala FL 34482 

Je pense que je suis sur la bonne voie en regardant dans preg_replace(), mais l'expression régulière car c'est ce qui m'arrive. Alternativement, si je peux extraire les coordonnées qui aideraient aussi. Je peux utiliser l'adresse ou les coordonnées lat et long pour faire le travail.

Merci d'avance pour toute assistance que je peux obtenir!

Modifier avec une solution depuis mon représentant SO est encore faible:

Merci à Mario, j'ai pu faire le travail. Voici mon code finalisé pour tous ceux qui peuvent aider.

Vous avez commencé avec ceci:

<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361&output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&source=embed&hl=en&geocode=&q=5475+NW+75+AVE,+Ocala+FL+34482&aq=&sll=29.300577,-82.294762&sspn=0.006755,0.013304&vpsrc=0&ie=UTF8&hq=&hnear=5475+NW+75th+Ave,+Ocala,+Florida+34482&t=m&z=14&ll=29.244022,-82.241361" style="color:#0000FF;text-align:left">View Larger Map</a></small> 

Et vous voulez ceci:

5475 NW 75 AVE, Ocala FL 34482

C'est ce qui a fonctionné pour moi:

// We first find and extract the 'src' from the iframe 
// $map is my original iframe embed 
// $q is our extracted and stripped text 
preg_match('#q=([^&"]+)#', $map, $match) 
and ($q = urldecode($match[1])); 

// Now you can echo out the address or use it elsewhere. 
// In my case, I am using jQuery goMap (http://www.pittss.lv/jquery/gomap) 
// and can add a new point on the map via $q 
echo $q; 
+1

Bienvenue dans Stack Overflow! S'il vous plaît s'abstenir d'analyser HTML avec RegEx comme il va [vous rendre fou] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) . Utilisez un [analyseur HTML] (http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php) à la place. –

+0

Fondamentalement, vous voulez juste extraire la partie 'q =' de l'URL interne alors? Alors oui, une regex pourrait faire. (Ne vous dérange pas la confusion stupide de l'analyse et l'appariement ici sur SO.) – mario

+0

@Truth Wow, je n'avais pas examiné dans ce domaine, merci! Cela semble également très intelligent. Savez-vous comment j'intégrerais ceci dans une solution pour mon problème? Je suppose que je peux faire un nettoyage d'expression régulière après que mon contenu est chargé? – Daryn

Répondre

1

Si vous insistez sur la solution surpuissant, vous devez d'abord utiliser une bibliothèque traversal HTML comme QueryPath pour diviser le HTML et obtenir l'attribut:

$url = qp($html)->find("iframe")->attr("src"); 

Mais ce qui est inutile et dans la pratique, vous devez simplement extraire l'URL à partir de votre extrait de texte:

preg_match('#http://[^"\']+#', $html, $match) 
and ($url = $match[0]); 

de là vient le diviser avec parse_url($url, PHP_URL_QUERY) et extraire les bits avec parse_str($qs, $vars) de sorte que vous obtenez $var["q"].

Mais si elle est une entrée assez cohérente, vous pouvez simplement tailler le paramètre q= avec:

preg_match('#q=([^&"]+)#', $html, $match) 
and ($q = urldecode($match[1])); 

Encore plus paresseux serait juste en utilisant parse_str dans l'ensemble extrait de HTML, et prier le chef de file et de déchets de fuite ne ne pas interférer avec l'extrait souhaité.

+0

Mario, c'est génial. Je n'avais pas pensé à extraire l'URL en premier. C'est beaucoup plus facile de travailler avec que de faire une regex sur le code global. Je vais travailler avec cela et rendre compte. Merci! – Daryn

+0

votre deuxième solution fonctionne pour moi sur un niveau de test. Toutes leurs cartes intégrées sont similaires, donc cela devrait fonctionner pour mon projet. Je vais poster mon code finalisé. Merci de votre aide. – Daryn

Questions connexes