Jump to content

Need help to get search result by Geo Location, php script

- - - - -

  • Please log in to reply
2 replies to this topic

#1
sergepol

sergepol

    Newbie

  • Members
  • Pip
  • 2 posts
Hi, everyone. I'm trying to create a code to get a search result for visitor's location. The website I work with grabs the data from the database, and display the search result. Visitors can filter this result by US states. What I would like to do is, when visitors open the search result webpage, it should show them result according to their location without log in or registration as many sites do.
I made some small research, and I would like to make it as simple as possible.
I've grabbed the script, but I have a difficulty to integrate it, and run query. I'm pretty new in php development, so I will be glad if someone could help me in codding and some ideas. Thanks in advance.

<?php

       $ip = getenv("REMOTE_ADDR");

       print_r(geoCheckIP($ip));

       //Array ( [domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen )


       //Get an array with geoip-infodata

       function geoCheckIP($ip)

       {

               //check, if the provided ip is valid

               if(!filter_var($ip, FILTER_VALIDATE_IP))

               {

                       throw new InvalidArgumentException("IP is not valid");

               }


               //contact ip-server

               $response=@file_get_contents('http://www.netip.de/search?query='.$ip);

               if (empty($response))

               {

                       throw new InvalidArgumentException("Error contacting Geo-IP-Server");

               }


               //Array containing all regex-patterns necessary to extract ip-geoinfo from page

               $patterns=array();

               $patterns["domain"] = '#Domain: (.*?) #i';

               $patterns["country"] = '#Country: (.*?) #i';

               $patterns["state"] = '#State/Region: (.*?)<br#i';

               $patterns["town"] = '#City: (.*?)<br#i';


               //Array where results will be stored

               $ipInfo=array();


               //check response from ipserver for above patterns

               foreach ($patterns as $key => $pattern)

               {

                       //store the result in array

                       $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';

               }


               return $ipInfo['state'];

       }


?>
There is some issue with print_r function, it doesn't print any info. The point is return $ipInfo by state to use it in sql query.
What do you think about it?

Thanks

Edited by Orjan, 17 June 2011 - 12:56 AM.
Add PHP tags when posting php code!


#2
Alexander

Alexander

    It's Science!

  • Moderators
  • 4,124 posts
  • Location:Vancouver, Eh! Cleverness: 200
I am unsure of that code, it seems in appropriate. For example it rips IP information off of a web page with regular expressions, which is slow and at the mercy of the page speed and will break if they change nearly anything.

You could utilize an actual API to do this, for example to return a JSON request:
http://freegeoip.net/json/<ip here>

You could decode the result with json_decode functions provided by recent versions of PHP 5.3.

Some basic information on the service is here, however it is a simple service (that provides XML or CSV if you require that as well as JSON):
https://github.com/f...ster/README.rst
Be sure to read the updated FAQ! || Health is achieved through the same 10,000 steps.
If a suggested code/method fails, informing us is less important than telling us why or what errors occurred.

#3
sergepol

sergepol

    Newbie

  • Members
  • Pip
  • 2 posts
Thanks for your reply. I'll try to do that.




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users