2009-08-16 8 views
5

Je viens à travers ce grand API: http://ipinfodb.com/ip_location_api.phpGeoLocation API

Cependant, je voudrais récupérer aussi le continent. Est-ce même possible que je ne peux pas le trouver.

Peut-être y a-t-il une autre API disponible gratuitement qui offrira la ville, le pays et le continent? J'ai essayé Google API AJAX mais ils ne proposent pas de continent non plus.

Peut-être que je vais devoir simplement convertir ce que j'ai déjà en continents, comment ?! J'espère que ce n'est pas trop subjectif!

Merci à tous

Répondre

14

Pourquoi ne pas vous associez chaque CountryCode XX CountryCode sur le continent respectif? Ne devrait pas être trop dur puisqu'il y a seulement environ 200 pays et 5 ou 7 continents.

EDIT: Je ne connais pas de cette base de données préparée en PHP, mais voici un json_encode « Le tableau d pour tous les pays avec le code de pays comme nom de clé et continent comme valeur:

$json = '{"AD":"Europe","AE":"Asia","AF":"Asia","AG":"North America","AI":"North America","AL":"Europe","AM":"Asia","AN":"North America","AO":"Africa","AQ":"Antarctica","AR":"South America","AS":"Australia","AT":"Europe","AU":"Australia","AW":"North America","AZ":"Asia","BA":"Europe","BB":"North America","BD":"Asia","BE":"Europe","BF":"Africa","BG":"Europe","BH":"Asia","BI":"Africa","BJ":"Africa","BM":"North America","BN":"Asia","BO":"South America","BR":"South America","BS":"North America","BT":"Asia","BW":"Africa","BY":"Europe","BZ":"North America","CA":"North America","CC":"Asia","CD":"Africa","CF":"Africa","CG":"Africa","CH":"Europe","CI":"Africa","CK":"Australia","CL":"South America","CM":"Africa","CN":"Asia","CO":"South America","CR":"North America","CU":"North America","CV":"Africa","CX":"Asia","CY":"Asia","CZ":"Europe","DE":"Europe","DJ":"Africa","DK":"Europe","DM":"North America","DO":"North America","DZ":"Africa","EC":"South America","EE":"Europe","EG":"Africa","EH":"Africa","ER":"Africa","ES":"Europe","ET":"Africa","FI":"Europe","FJ":"Australia","FK":"South America","FM":"Australia","FO":"Europe","FR":"Europe","GA":"Africa","GB":"Europe","GD":"North America","GE":"Asia","GF":"South America","GG":"Europe","GH":"Africa","GI":"Europe","GL":"North America","GM":"Africa","GN":"Africa","GP":"North America","GQ":"Africa","GR":"Europe","GS":"Antarctica","GT":"North America","GU":"Australia","GW":"Africa","GY":"South America","HK":"Asia","HN":"North America","HR":"Europe","HT":"North America","HU":"Europe","ID":"Asia","IE":"Europe","IL":"Asia","IM":"Europe","IN":"Asia","IO":"Asia","IQ":"Asia","IR":"Asia","IS":"Europe","IT":"Europe","JE":"Europe","JM":"North America","JO":"Asia","JP":"Asia","KE":"Africa","KG":"Asia","KH":"Asia","KI":"Australia","KM":"Africa","KN":"North America","KP":"Asia","KR":"Asia","KW":"Asia","KY":"North America","KZ":"Asia","LA":"Asia","LB":"Asia","LC":"North America","LI":"Europe","LK":"Asia","LR":"Africa","LS":"Africa","LT":"Europe","LU":"Europe","LV":"Europe","LY":"Africa","MA":"Africa","MC":"Europe","MD":"Europe","ME":"Europe","MG":"Africa","MH":"Australia","MK":"Europe","ML":"Africa","MM":"Asia","MN":"Asia","MO":"Asia","MP":"Australia","MQ":"North America","MR":"Africa","MS":"North America","MT":"Europe","MU":"Africa","MV":"Asia","MW":"Africa","MX":"North America","MY":"Asia","MZ":"Africa","NA":"Africa","NC":"Australia","NE":"Africa","NF":"Australia","NG":"Africa","NI":"North America","NL":"Europe","NO":"Europe","NP":"Asia","NR":"Australia","NU":"Australia","NZ":"Australia","OM":"Asia","PA":"North America","PE":"South America","PF":"Australia","PG":"Australia","PH":"Asia","PK":"Asia","PL":"Europe","PM":"North America","PN":"Australia","PR":"North America","PS":"Asia","PT":"Europe","PW":"Australia","PY":"South America","QA":"Asia","RE":"Africa","RO":"Europe","RS":"Europe","RU":"Europe","RW":"Africa","SA":"Asia","SB":"Australia","SC":"Africa","SD":"Africa","SE":"Europe","SG":"Asia","SH":"Africa","SI":"Europe","SJ":"Europe","SK":"Europe","SL":"Africa","SM":"Europe","SN":"Africa","SO":"Africa","SR":"South America","ST":"Africa","SV":"North America","SY":"Asia","SZ":"Africa","TC":"North America","TD":"Africa","TF":"Antarctica","TG":"Africa","TH":"Asia","TJ":"Asia","TK":"Australia","TM":"Asia","TN":"Africa","TO":"Australia","TR":"Asia","TT":"North America","TV":"Australia","TW":"Asia","TZ":"Africa","UA":"Europe","UG":"Africa","US":"North America","UY":"South America","UZ":"Asia","VC":"North America","VE":"South America","VG":"North America","VI":"North America","VN":"Asia","VU":"Australia","WF":"Australia","WS":"Australia","YE":"Asia","YT":"Africa","ZA":"Africa","ZM":"Africa","ZW":"Africa"}'; 

il suffit d'appeler avec:

echo '<pre>'; 
print_r(json_decode($json, true)); 
echo '</pre>'; 
+0

C'est exactement ce que j'essaie de faire, mais surley il ya une base de données qui existe déjà ou PHP a une fonction intégrée pour le faire? – Abs

+0

Génial !! Où avez-vous eu cet eyze et à quel point pensez-vous qu'il est précis? – Abs

+0

AFAIK c'est une source fiable, je l'ai trouvé disponible sur un service web (http://services.sapo.pt/GIS/GetCountries) Je l'ai juste gratté et traduit les noms de continent en anglais. –

6

il y a seulement 200ish pays et seulement 6 continents, donc je me demande pourquoi vous avez besoin d'un service Web pour déterminer que peu d'info ... à moins que vous prévoyez d'obtenir un grand nombre d'utilisateurs f Si les pays sont si politiquement instables, ils changeront de nom ou cesseront d'exister avant que votre application ne le fasse. Gardez juste une liste statique.

De plus, tous les pays ne sont pas sur un continent. Nouvelle-Zélande par exemple, ne fait pas partie de l'Australie (selon Wikipedia au moins).

Si vous pouvez déterminer le pays de l'utilisateur par programmation, vous disposez de suffisamment d'informations pour rechercher son continent dans une liste statique que vous possédez. Il vous faudrait une heure pour assembler vous-même cette information et la mettre dans une base de données ou un fichier XML, et cela changera rarement. Vous avez déjà passé presque autant de temps à essayer de déterminer dynamiquement le continent.

+0

Quelles informations sur le dernier bit? Tu veux dire le continent?J'ai besoin de déterminer cela car je voudrais faire diverses fonctions en fonction de l'emplacement du continent des utilisateurs, puis faire un zoom par pays, ville, etc. Ma question peut être simple, mais ma ligne de pensée ne l'est pas. :) – Abs

+0

@Abs voir mon édition (déplacé commentaire en réponse pour aider à clarifier) ​​ –

+0

Merci Rex. Je comprends. C'est juste que je suis paresseux et j'espérais qu'il serait préparé et tout emballé pour moi! – Abs

1

Regardez MaxMind GeoLite Country et MaxMind GeoLite City. Si vous êtes principalement sur le continent (je ne sais pas si GeoLite s'en charge), vous pouvez toujours mapper les codes de pays de la base de données GeoLite aux codes de pays world database que MySql utilise comme base de données exemple. Cela a le continent pour chaque pays stocké.

+0

J'ai essayé ces gars et leur mise en œuvre est désordonnée, la précision n'est pas si grande pour la fonctionnalité gratuite. Mais tu as raison, c'est le meilleur que j'ai rencontré, mais j'ai besoin de quelque chose de meilleur et de plus léger. – Abs

+2

@Abs - la base de données mondiale mysql a des continents. Si la ou les bases de données GeoLite ont des codes de pays (n'ont pas été cochées) cela pourrait fonctionner. – karim79

+0

Bon point. Je pense que oui. Cher Dieu, je suis un niais! :) – Abs