2010-06-27 12 views
5

मैं कैसे Regex का प्रयोग करेंगे स्थान API करने के लिए एक आईपी के बारे में जानकारी प्राप्त करने के लिएआईपी के लिए स्थान API को पीएचपी Regex

यह API

http://ipinfodb.com/ip_query.php?ip=74.125.45.100 है

मैं देश का नाम पाने के लिए की आवश्यकता होगी , क्षेत्र/राज्य, और शहर।

मैं इस कोशिश की:

$ip = $_SERVER["REMOTE_ADDR"]; 
$contents = @file_get_contents('http://ipinfodb.com/ip_query.php?ip=' . $ip . ''); 
$pattern = "/<CountryName>(.*)<CountryName>/"; 
preg_match($pattern, $contents, $regex); 
$regex = !empty($regex[1]) ? $regex[1] : "FAIL"; 
echo $regex; 

जब मैं गूंज $ regex कर मैं हमेशा विफल हो मैं कैसे ठीक कर सकते हैं इस

उत्तर

3

हारून के रूप में सुझाव दिया है। बेस्ट बदलने की नहीं पहिया तो()

// Init the CURL 
$curl = curl_init(); 

// Setup the curl settings 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0); 

// grab the XML file 
$raw_xml = curl_exec($curl); 

curl_close($curl); 

// Setup the xml object 
$xml = simplexml_load_string($raw_xml); 

simplexml_load_string साथ यह पार्स करने की कोशिश अब आप $ एक्सएमएल चर के किसी भी भाग एक वस्तु के रूप में, उस के साथ संबंध में यहाँ तक पहुँच सकते हैं कि आप क्या पोस्ट का एक उदाहरण है।

<Response> 
    <Ip>74.125.45.100</Ip> 
    <Status>OK</Status> 
    <CountryCode>US</CountryCode> 
    <CountryName>United States</CountryName> 
    <RegionCode>06</RegionCode> 
    <RegionName>California</RegionName> 
    <City>Mountain View</City> 
    <ZipPostalCode>94043</ZipPostalCode> 
    <Latitude>37.4192</Latitude> 
    <Longitude>-122.057</Longitude> 
    <Timezone>0</Timezone> 
    <Gmtoffset>0</Gmtoffset> 
    <Dstoffset>0</Dstoffset> 
</Response> 

अब के बाद आप simplexml_load_string में इस XML स्ट्रिंग लोड() आप प्रतिक्रिया के आईपी पते इसलिए की तरह उपयोग कर सकते हैं।

$xml->IP; 

simplexml_load_string() एक वस्तु है कि आप में हेरफेर कर सकते हैं में अच्छी तरह से गठित XML फ़ाइलों को बदलने होंगे। केवल दूसरी बात मैं कह जाना और इसे आज़माने और इसके साथ खेलने गया है सकते हैं

संपादित करें:

स्रोत http://www.php.net/manual/en/function.simplexml-load-string.php

+1

या बस: '$ एक्सएमएल = simplexml_load_file ($ यूआरएल);' – salathe

+0

शब्दार्थ ;-) यह केवल वास्तविक काम कर उदाहरण मैं चारों ओर – WarmWaffles

2

आप वास्तव में जानकारी खींचने के लिए एक XML पार्सर का उपयोग कर बेहतर कर रहे हैं।

उदाहरण के लिए, this script एक सरणी में उसे पार्स होगा।

Regex वास्तव में HTML या XML पार्स करने के लिए नहीं किया जाना चाहिए।

+0

एक उदाहरण पोस्ट कृपया! – xZerox

+0

आपके लिए अपडेट किया गया। =) –

1

तुम सच में रेगुलर एक्सप्रेशन का उपयोग करने की आवश्यकता है, तो आप एक ठीक हो जानी चाहिए आप का उपयोग कर रहे हैं। "|<CountryName>([^<]*)</CountryName>|i" बेहतर काम करेगा।

+0

बिछाने था दूसरों से रिपोर्ट किया गया था, मैं नहीं बल्कि एचटीएमएल पार्स करने के लिए रेगुलर एक्सप्रेशन का उपयोग नहीं होगा, एक्सएचटीएमएल, या एक्सएमएल अगर कुछ विशेष मामलों में नहीं है। मुझे तुरंत सत्यापित करना था कि लौटाए गए XML सामग्री में एक टैग था, और मैंने नियमित अभिव्यक्ति का उपयोग किया; अन्य मामलों के लिए, यह, SimpleXML उपयोग करने के लिए करता है, तो वापस आ एक्सएमएल बहुत बड़ा नहीं है ज्यादा बेहतर है। – kiamlaluno