Статья

Как использовать API

Здесь представлены исходные коды на PHP и Python(для Django) для доступа к базе через API. Другие языки будут доступны позже.

PHP и fsockopen

// Имя вашего домена
$site_name = "www.your-site-name.com";

function getUserCountry() {
    $fp = fsockopen("api.wipmania.com", 80, $errno, $errstr, 5);
    if (!$fp) {
        // API is currently down, return as "Unknown" :(
        return "XX";
    } else {
        $out = "GET /".$_SERVER['REMOTE_ADDR']."?".$site_name." HTTP/1.1\r\n";
        $out .= "Host: api.wipmania.com\r\n";
        $out .= "Typ: php\r\n";
        $out .= "Ver: 1.0\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            $country = fgets($fp, 3);
        }
        fclose($fp);
        return $country;
    }
}

PHP and curl

Другая альтернатива (Спасибо www.anieto2k.com)
// Имя вашего домена
$site_name = "www.your-site-name.com";

function getUserCountry() {
    $url = 'http://api.wipmania.com/'.$_SERVER['REMOTE_ADDR'].'?'.$site_name;
    $ch = curl_init();
    $headers = "Typ: phpcurl\r\n";
    $headers .= "Ver: 1.0\r\n";
    $headers .= "Connection: Close\r\n\r\n";
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($headers));
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

Для фреймворка Django(python)

В вашем views:
from worldip import getUserCountry
remote_addr = request.META.get('REMOTE_ADDR',"127.0.0.1")
country = getUserCountry(remote_addr)
Добавьте в settings.py ваш URL как SITE_URL, например,
SITE_URL = "http://www.google.com"
Небольшая функция getUserCountry в worldip.py, здесь можно ее скачать
#!/usr/bin/env python

from urllib2 import urlopen, Request
import re, socket
from django.conf import settings

domain_re = re.compile('^(http|https):\/\/?([^\/]+)')
domain = domain_re.match(settings.SITE_URL).group(2)

def getUserCountry(ip):
    url = "http://api.wipmania.com/" + ip + "?" + domain
    socket.setdefaulttimeout(5)
    headers = {'Typ':'django','Ver':'1.0','Connection':'Close'}
    try:
        req = Request(url, None, headers)
        urlfile = urlopen(req)
        land = urlfile.read()
        urlfile.close()
        return land[:2]
    except Exception:
        return "XX"
Если Вы используете нашу базу или API, мы были бы очень рады ссылке на Wipmania.com.
Anonymous Украина09 Сен 2008 12:09#18Русский   
Ребята, у вас ошибка в этой строчке: while (!feaof($fp))--> feof() - будет правильно.
А вообще спасибо! Поставил себе в админ-часть, чтоб видеть, кто ко мне заходит. Буду советовать вас друзьям.
wipmania logo Alrond 09 Сен 2008 14:09#19Русский   
Спасибо, была очепятка в русской версии статьи
Anonymous Россия11 Сен 2008 05:09#21Русский   
Странно, во всех реализациях пересылаются HTTP-заголовки Typ и Ver, а на странице WIP-API про них ни слова! Как же так?
wipmania logo Alrond 11 Сен 2008 06:09#22Русский   
Все очень просто - они необязательны и служал лишь для проверки правильности работы кода, написанного нами же. А впоследствии и правильность работы модов.
Хотя после комментария заметил, что стоило бы разделить "Typ" для версий с curl-ом и обычной. Что сейчас и сделаю...
Anonymous Россия11 Сен 2009 01:09#1650Русский   
а как узнать географическое положение через API?
wipmania logo Alrond 18 Сен 2009 06:09#1666Русский   
Пока никак, потому что детализация только на уровне страны. Как только будут готовы для публичного доступа база по городам, то в апи будет возможность получения большей информации, координат в том числе.
А сейчас координаты можно получить только центра страны и только в версии JSON
Henk-Sjoerd Duijst Нидерланды01 Ноя 2009 19:11#1764English   
wipmania logo Alrond 01 Ноя 2009 20:11#1767English   
Anonymous Германия21 Янв 2010 04:01#2094Русский   
ребята, вы чего????


<?php

$site_name = "www.your-site-name.com";

$x=file_get_contents('http://api.wipmania.com/'.$_SERVER['REMOTE_ADDR'].'?'.$site_name);

print $x;

?>
зачем больше?!?!?!
Великобритания08 Дек 2010 12:12#3060English   

Аноним/Имя OpenID OpenID Yahoo! OpenID AOL WordPress LiveJournal TypePad Vox Myvidoop Orange Yandex YandexBlog Mixi Myspace Flickr Verisign MyOpenID ClaimID

Все поля необязательны для заполнения

Для самой статьи оставьте поле пустым.
Для комментария максимум 5000 символов. BBcode включены.

Подписаться на ответы: все комментарии:RSS comments (ru)

Please have a look at our
Facebook Page and leave a comment

Creative Commons License
Creative Commons Attribution-Noncommercial 3.0 License