Ufafanuzi wa jiji la API. Kuamua eneo la mtumiaji. js Uamuzi wa nchi, eneo, jiji kupitia Yandex API

Onyesha jiji la mgeni ili kuboresha viwango vya ubadilishaji wa duka. Nambari ya uwekaji iliyo tayari kufanywa popote kwenye tovuti inayoonyesha jiji, eneo na nchi. Nilijaribu maandishi mengi, lakini hii iligeuka kuwa rahisi na yenye ufanisi zaidi! Niliitumia wakati wa kuunda tovuti www.mzm-market.ru, ambapo hati inaonyesha "utoaji kwa______"

Bandika msimbo ufuatao kwenye index.tpl (au kwenye ukurasa wa uwasilishaji) mahali popote unapotaka:



window.onload =kazi())(
jQuery("#mji-mtumiaji").maandishi(ymaps.geolocation.city);
jQuery("#mkoa-mtumiaji").maandishi(ymaps.geolocation.region);
jQuery("#nchi ya mtumiaji").maandishi(ymaps.geolocation.country);)


Pato hufanywa kwa kutumia:

// nchi, jiji, eneo.
geolocation.country, geolocation.city, geolocation.region

Ningependa kuongeza kidogo kwenye chapisho hili (lililohaririwa Februari 18, 2017).

Wakati wa kutumia maandishi hapo juu, katika miji mingi na vivinjari hakuna chochote kilichoonyeshwa, na baada ya utaftaji mrefu nilipata labda hati bora zaidi ya kuamua nchi, mkoa, jiji kupitia API ya Yandex. Niliijaribu kupitia wateja wangu, ambao wako karibu kote Urusi na kwingineko, na hati hii ilionyesha kuwa bora! Hapa kuna picha ya skrini ya mteja wangu:

Unaelewa kuwa kila kitu kimefafanuliwa wazi! Kweli, sitakutesa kwa maandishi na nitakupa mfano!

js Uamuzi wa nchi, eneo, jiji kupitia Yandex API

Bandika tu nambari hii kati ya vitambulisho




$(hati).tayari(kazi())(
ymaps.tayari(kazi())(
var geolocation = ymaps.geolocation;
$("#cou").html("Nchi yako: "+geolocation.country);
$("#tow").html("Mji wako: "+geolocation.city);
$("#reg").html("Eneo lako: "+geolocation.region);
});
});

Na nambari hii iko mahali pazuri kwenye ukurasa wako:

Nchi yako: ... imedhamiria...
Jiji lako: ... limedhamiriwa...
Eneo lako: ... imedhamiriwa...

Maonyesho

Nchi yako: ... imedhamiria...

Jiji lako: ... limedhamiriwa...

Eneo lako: ... imedhamiriwa...

Maandishi hufanya kazi bila shida, lakini inawezekana kwamba kwa wale walio katika vijiji vidogo, jiji litaamuliwa vibaya, na jiji la mtoaji wako wa mtandao litaamuliwa.

Salaam wote!

Sitasema mara nyingi, lakini mara kwa mara watengenezaji wanahitaji kuamua jiji na IP katika hati ya PHP.

Kwa mfano, uliamua kurahisisha mtumiaji kuingiza maelezo ya mawasiliano wakati wa kuweka agizo kwenye duka la mtandaoni. Au unataka kuweka lugha ya kiolesura cha tovuti kulingana na nchi ambayo mgeni alitoka kwenye tovuti yako.

Kweli, mara nyingi, kubainisha jiji kwa IP katika PHP kwa kutumia GeoIP pengine kunahitajika na wasanidi wa mitandao mbalimbali ya utangazaji ili kutoa utangazaji unaolengwa kwa watumiaji kulingana na eneo lao la kijiografia.

Mimi mwenyewe nilihitaji tu kujua nchi na IP kwenye hati ya PHP mara moja, nilipoamua kupakia vilivyoandikwa vya mitandao mbalimbali ya kijamii kwenye tovuti kwa watumiaji kutoka nchi tofauti. Nitaandika zaidi kwa nini hii haikuhitajika na kile kilichotokea mwishoni katika makala inayofuata.

Wakati huo huo, hebu tuzungumze kuhusu njia ngapi za kuamua jiji na nchi na IP katika PHP kuna na ni chaguzi gani za utekelezaji wao zipo.

PHP GeoIP - utendaji wa kawaida wa wahusika wengine

Nilitaja haswa maelezo ya njia ya kwanza kwa njia hii. Ukweli ni kwamba katika PHP yenyewe haiwezekani kuamua jiji na nchi kwa anwani ya IP - lugha haina zana muhimu kwa hili.
Lakini hati rasmi ina maoni juu ya jinsi ya kufanya hivyo.

PHP GeoIP ni maktaba ya mtu wa tatu ambayo inahitaji kuunganishwa kwa kuongeza, licha ya ukweli kwamba maelezo ya kazi zilizojumuishwa ndani yake ni sehemu ya nyaraka rasmi za PHP - http://php.net/manual/ru/ref.geoip .php

Kimsingi, nia za watengenezaji PHP ni wazi kabisa.

Kwanza, kuingizwa kwa moduli hii katika kit cha lugha yenyewe kunahitaji kiasi kikubwa cha rasilimali za seva.

Pili, GeoIP PHP hufanya kazi kulingana na orodha ya anwani za IP zinazolingana na nchi na miji maalum. Kwa hivyo, GeoIP PHP inahitaji usaidizi wa mara kwa mara na upanuzi/kisasa wa hifadhidata iliyopo, ambayo inaweza kuwa maumivu ya ziada kwa wasanidi wa PHP.

Kweli, na tatu, kuamua jiji na IP katika PHP ni kipengele ambacho hutumiwa mara chache katika mazoezi.

Kama matokeo, kwa sababu ya mambo haya, PHP GeoIP ni ugani wa mtu wa tatu, msaada ambao na uundaji wa API ya kuunganishwa kwenye tovuti zilizopo unafanywa na kampuni ya MaxMind, kiungo ambacho kipo katika maelezo. ya maktaba hii.

Sitaelezea mchakato wa kuisanikisha kwenye seva, kwa sababu ... Mimi mwenyewe sijafanya hivi kwa vitendo, na Mtandao kwa sasa umejaa miongozo ya kusakinisha PHP GeoIP kwenye seva zote za Linux na Windows.

Ninaweza kusema tu kuwa njia hii ya kuamua jiji, nchi na habari zingine za jiografia na IP katika PHP ina shida mbili muhimu:

  • Ufikiaji wa hifadhidata ya habari kamili juu ya anwani za IP zinazotolewa na MaxMind hulipwa. Zaidi ya hayo, kiasi hicho ni cha dola, cha kutosha :) Chaguo zilizopunguzwa sana tu zinapatikana bila malipo - http://dev.maxmind.com/geoip/geoip2/geolite2/
  • Kwa kuzingatia kwamba PHP GeoIP ni kiendelezi cha mtu wa tatu, itahitaji kusakinishwa kando kwenye seva, ambayo inaweza kuwa kazi ngumu ikiwa upangishaji pamoja utatumiwa. Unaweza, bila shaka, kuwasiliana na usaidizi wa kiufundi, lakini sio ukweli kwamba watakusaidia. Kwa mfano, nilipouliza kufunga Sphinx, nilikataliwa.
  • Kuamua jiji na IP katika PHP kwa kutumia maktaba mbadala

    Njia nyingine ya kujua jiji na IP katika hati ya PHP ni kutumia maktaba mbadala za seva na hifadhidata za anwani za IP isipokuwa MaxMind.

    Lakini wana shida sawa na chaguo la awali, kwa sababu ... ni washindani tu wa MaxMind. Ufikiaji wa hifadhidata na uwezo wa kutumia API zao pia hulipwa. Kwa bure unaweza kupata tu orodha ya nchi na miji kwa IP, wakati kwa mpango uliolipwa unaweza kupata orodha pana ya data.

    Faida pekee juu ya PHP GeoIP ni kwamba maktaba hizi zimeunganishwa katika msimbo wa PHP, na si kwa kiwango cha seva, i.e. zinaweza kutumika hata kwenye upangishaji pamoja.

    Mfano wa maktaba hiyo hutolewa na huduma ya db-ip.com.

    Kwa njia, huduma niliyotaja haitoi tu maktaba yake ya PHP kwa kupata geodata kutoka kwa IP za mteja, lakini pia upatikanaji wa hifadhidata za habari kwa anwani. Kwa hivyo, kimsingi, hakuna mtu anayekuzuia kuzitumia katika PHP GeoIP kutumia API yake, lakini kuchukua habari kutoka kwa vyanzo vingine.

    Kweli, na hakika hakuna mtu anayekuzuia kuandika kichanganuzi chako cha faili za hifadhidata ya anwani ya IP ili kupata habari kutoka kwao mwenyewe, bila ruhusa zozote za watu wengine.

    Jinsi ya kuamua jiji na IP katika PHP mkondoni

    Kweli, sasa nimekuja kwa njia ya mwisho ya jinsi ya kujua nchi na IP katika PHP na habari zingine za geo, ambazo mimi mwenyewe nimetumia katika mazoezi.

    Inajumuisha kutumia huduma za mtandaoni za API zinazokuruhusu kupokea data kwa anwani ya IP mtandaoni.

    Niliamua kuamua jiji na IP katika PHP kwa kutumia njia hii, kwa sababu ... ni bila ya drawback kuu ya wale uliopita. Yaani, ni rahisi kutekeleza - hauitaji kusakinisha au kusanidi chochote kwenye seva, na, zaidi ya hayo, uulize usaidizi wa kiufundi wa mwenyeji wa pamoja kwa hili.

    Ili kupata taarifa muhimu kupitia IP, unahitaji tu kutuma ombi kwa URL maalum na kushughulikia jibu.

    Kuhusu gharama ya kuzitumia, kwa sehemu kubwa pia hulipwa, kwa sababu... fanya kazi, kama sheria, kwa msingi wa hifadhidata zilizopo za IP za kibiashara. Lakini pia kuna huduma za bure ambazo hutoa, labda, habari kamili kama ya kibiashara, lakini inaweza kupatikana kwa kiasi cha ukomo.

    Kweli, kwa haraka sana huacha kuwepo, isiyo ya kawaida, kwa sababu Ni vigumu sana kuishi kwa kutoa huduma hizo. Hili lilionyeshwa na uchanganuzi wangu wa huduma zisizolipishwa za mtandaoni za kubainisha miji na nchi kwa kutumia IP, ambazo nilifanya kwa madhumuni ya kibinafsi. Walionekana kwenye tovuti nyingi, lakini ulipojaribu kuzitumia, ilikuwa wazi kwamba walikuwa wameacha kuwepo.

    Mwishowe, nilipata kile nilichohitaji, ambacho ndicho ninachotaka kuamua na wewe - http://www.geoplugin.com/

    Huduma hii hukuruhusu kuamua jiji na habari zingine kwa IP kwenye wavuti ya huduma, na ufanye hivi kutoka kwa nambari. Ifuatayo, nitatoa mfano wa kuamua nchi na IP katika hati ya PHP kwa kutumia geoplugin.com. kanuni unafanywa kwa kutumia kanuni ilivyoelezwa katika makala katika kiungo.

    Kama unavyoona, kiini cha nambari iliyo hapo juu ni kuamua anwani ya IP ya mteja, kwa kuzingatia uwezekano wa kuiunganisha kupitia proksi, na kutuma ombi kupitia API ya GeoPlugin na uainishaji zaidi na uchambuzi wa matokeo.

    Katika mfano wangu, kama nilivyokwisha sema, matokeo ya hati hii itakuwa nambari ya nchi ya mteja wa tovuti. Kwa ujumla, orodha kamili ya vigezo vilivyorejeshwa inaonekana kama hii (kwa mfano, niliamua kuchukua IP ya mkoa wa Novosibirsk wa Shirikisho la Urusi):

    ( "geoplugin_request":"195.208.128.3", "geoplugin_status":200, "geoplugin_credit":"Baadhi ya data iliyorejeshwa inajumuisha data ya GeoLite iliyoundwa na MaxMind, inayopatikana kutoka http:\/\/www.maxmind.com.", "geoplugin_city":"Novosibirsk", "geoplugin_region":"Novosibirsk", "geoplugin_areaCode":"0", "geoplugin_dmaCode":"0", "geoplugin_countryCode": "RU", "geoplugin_countryName":"Shirikisho la Urusi", "geoplugin_continentCode":"EU", "geoplugin_latitude":"55.09", "geoplugin_longitude":"82.6519", "geoplugin_regionCode":"53", "geoplugin_region":"jina la geoplugin":" Novosibirsk", "geoplugin_currencyCode":"RUB", "geoplugin_currencySymbol":"sugua", "geoplugin_currencySymbol_UTF8":"\u0440\u0443\u0431", "geoplugin_currencyConverter":58.9289 )

    Kama unavyoona, huduma hii hutumia MaxMind iliyotajwa hapo awali (geoplugin_credit parameter), lakini ikiwa habari imelipwa au la ni vigumu kukisia. Kwa upande mmoja, kiunga cha chanzo kinaonyesha kuwa ufikiaji wa bure kwa hifadhidata ya IP hutumiwa, lakini, kwa upande mwingine, hatuoni tu nchi na jiji, lakini pia habari zingine nyingi, pamoja na jiji, kijiografia. kuratibu, kuratibu (langitudo, latitudo) , sarafu ya sasa na hata kiwango cha ubadilishaji wake.

    Kwa hivyo huduma hii inaweza kuitwa PHP GeoIP mkondoni. Tofauti yake pekee kutoka kwa mwenzake wa seva ni kwamba inapokea taarifa kupitia IP polepole kidogo kutokana na ukosefu wa caching ya seva. Lakini hii haimaanishi kuwa haiko kwenye seva ya GeoPlugin yenyewe 😉 Kwa hivyo shida hii ni ya mfano.

    Kwa hali yoyote, watengenezaji wa GeoPlugin wanastahili pongezi, na, haswa, kwa ukweli kwamba hawakuchanganya tovuti yao na utangazaji wa muktadha. Wale. Jinsi hata wanaishi haijulikani. Njia pekee ya kusema "asante" kwao ni kuchangia akaunti yako ya PayPal.

    Kwa njia, nambari ya PHP niliyotoa ya kuamua jiji na IP ni ya ulimwengu wote. Unaweza kuitumia kupata geodata kwa kutumia huduma zingine. Kitu pekee ambacho utahitaji kubadilisha ndani yake ni URL ya API ya huduma na jina la vigezo muhimu ambavyo utahitaji kupokea.

    Hiyo ndiyo yote niliyo nayo. Andika maoni yako juu ya kifungu katika maoni hapa chini na usisahau kushiriki chapisho na marafiki zako kwenye mitandao ya kijamii.

    P.S. : ikiwa unahitaji tovuti au unahitaji kufanya mabadiliko kwa iliyopo, lakini hakuna wakati au tamaa ya hili, naweza kutoa huduma zangu.

    Zaidi ya miaka 5 ya uzoefu katika ukuzaji wa wavuti wa kitaalamu. Kufanya kazi na PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular na teknolojia zingine za ukuzaji wa wavuti.

    Uzoefu katika kuendeleza miradi katika ngazi mbalimbali: kurasa za kutua, tovuti za ushirika, maduka ya mtandaoni, CRM, portaler. Ikiwa ni pamoja na msaada na maendeleo ya miradi ya HighLoad. Tuma maombi yako kwa barua pepe [barua pepe imelindwa].

    Ambayo "baiskeli" yangu ilitajwa, yenye sifa ya kasi ya juu. Moja ya maswali maarufu ilikuwa uwezekano wa kuamua jiji na IP.

    Na miezi michache baadaye, mradi ulioanza kama "wa kufurahisha" ulikua mradi wa kujitegemea.
    Tovuti tofauti iliyojitolea kwa mradi wa Sypex Geo imefunguliwa, ambapo unaweza kupakua matoleo ya hivi karibuni ya API na hifadhidata, na pia kusoma hati.

    Kwa wale ambao wanataka kujaribu haraka usahihi wa kuamua jiji na IP, hapa kuna kiunga cha ukurasa wa onyesho. Na chini ya utapeli, nitaelezea maelezo kadhaa ya kiufundi na kutoa matokeo ya upimaji kidogo.

    Umbizo la Sypex Geo 2.1 Tangu kuchapishwa kwa makala ya mwisho, umbizo la Sypex Geo (lililofupishwa kama SxGeo) limeboreshwa, na uwezo wa kujumuisha saraka mbili kwenye hifadhidata - miji na maeneo - umeongezwa.

    Wakati wa kuunda muundo mpya, vipaumbele vifuatavyo viliwekwa:

    • kasi kubwa
    • matumizi ya chini ya rasilimali
    • uwazi (maelezo ya umbizo la faili ya binary ya hifadhidata na API zimefunguliwa)
    • utofauti (uwezo wa kuunda hifadhidata na seti zozote za data)
    Umbizo hukuruhusu kuhifadhi data katika usimbaji tofauti. Baada ya kuondoka kwa beta, hati za kubadilisha hifadhidata kutoka MySQL hadi faili ya hifadhidata ya binary zitachapishwa.

    Habari ifuatayo imehifadhiwa kwenye hifadhidata:

    • Kitambulisho cha Nchi
    • Msimbo wa nchi wa ISO 3166-1 (herufi mbili)
    • FIPS 10-4 Msimbo wa Mkoa (herufi mbili)
    • Jina la eneo (si lazima)
    • Jiji
    • Latitudo
    • Longitude
    • Saa za eneo (si lazima)
    Orodha hii inaweza kubadilishwa na/au kupanuliwa ikiwa ni lazima. Maelezo zaidi kuhusu umbizo la SxGeo 2.1 yanaweza kupatikana kwenye tovuti. Hifadhidata mwenyewe Baada ya kufahamiana kwa karibu sana na mfumo maarufu wa eneo la GeoLite City kutoka MaxMind, iliamuliwa kuunda hifadhidata yetu wenyewe. Shida ni kwamba Jiji la GeoLite lina makosa mengi, takataka, miji iliyorudiwa, mgawanyiko mwingi wa safu, na shida na miji ya USSR ya zamani (kwa mfano, majina ya kampuni au majina ya waliohusika kutoka Whois huchukuliwa. badala ya miji).

    Hivi sasa hifadhidata inategemea Jiji la GeoLite, lakini tayari ina chanjo iliyosanifiwa upya ya Urusi, Ukraine na Belarusi. Nchi nyingine zitaelezwa hatua kwa hatua, hasa CIS na Ulaya. Hifadhidata ya Sypex Geo City ina majina ya miji na mikoa katika Kirusi katika UTF-8 (kuna majina ambayo bado hayajatafsiriwa), pamoja na eneo la saa.

    Kwa kuongeza, hifadhidata zingine zilizobadilishwa kuwa umbizo la SxGeo 2.1 zinapatikana kwenye tovuti.

    Matumizi Kutumia Sypex Geo API ni rahisi iwezekanavyo.
    1. Nakili SxGeo.php na SxGeoCity.dat (au hifadhidata nyingine) kwa seva 2. Unganisha faili ya SxGeo.php kwenye hati yako kwa kuongeza mstari ni pamoja na("SxGeo.php"); 3. Unda kitu cha SxGeo //$SxGeo = new SxGeo(); // Hali chaguo-msingi, faili ya hifadhidata SxGeo.dat $SxGeo = new SxGeo("SxGeoCity.dat", SXGEO_BATCH | SXGEO_MEMORY); // Njia ya haraka zaidi 4. Tambua jiji (SxGeo City, GeoLite City, IpGeoBase) $SxGeo->kupata($ip); (hurejesha taarifa kuhusu jiji, bila jina la eneo na eneo la saa) // $SxGeo->getCityFull($ip); (hurejesha taarifa kamili kuhusu jiji na eneo) Jaribio la utendakazi Na kwa dessert, majaribio ya utendakazi linganishi kidogo. Wapinzani ni GeoLite API na Geobaza API. Washiriki wote wa majaribio hutumia hifadhidata ya binary ya umbizo lao wenyewe, na kutumia PHP API. Jaribio hufanyika chini ya Win 7 (idadi hudumishwa kwenye Linux), PHP 5.2.17.

    Matokeo baada ya kukimbia 10 kwa kila API katika hali mbili (ya kawaida na yenye uhifadhi wa kumbukumbu), wastani na kuzungusha hadi kumi zilizo karibu. Kwa kila kukimbia, safu ya anwani 50,000 za IP bila mpangilio huundwa, na kila algoriti hutafuta kwa kitanzi.

    Mapendekezo na matakwa yanakaribishwa. Pia tunatafuta watu walio tayari kusaidia katika kuhamisha API kwa lugha zingine na kuunda moduli za Apache na nginx.

    Kuamua eneo la mtumiaji ni jambo muhimu sana kwa maduka ya mtandaoni na kurasa za kutua. Lakini kwa maeneo rahisi pia itakuwa ya kuvutia kufanya, kwa mfano, kujaza moja kwa moja ya mashamba ya jiji, nchi, nk. Kwa kweli, aina mbalimbali za kujaza otomatiki zitaharakisha usajili na kuagiza.

    Ufungaji

    Tunaunganisha maktaba ya Yandex:

    Inachanganua data ya eneo:


    window.onload = kazi() (
    jQuery("#mji-mtumiaji").maandishi(ymaps.geolocation.city);
    jQuery("#mkoa-mtumiaji").maandishi(ymaps.geolocation.region);
    jQuery("#nchi-ya mtumiaji").maandishi(ymaps.geolocation.country);
    }

    Katika mahali ambapo unahitaji kuonyesha jiji, eneo na nchi, ingiza:

    Unaweza kunakili tu vipande vyote vitatu na ubandike mahali pamoja kwenye tovuti. Ajabu, lakini nilijaribu hati kwenye wavuti ya onyesho na haikutoa data yoyote. Baada ya kuiingiza kwenye Uraaa, hati ilitoa data zote za jiji, mkoa na nchi. Bado sijaelewa sababu kwa nini hati haikufanya kazi kwenye wavuti ya onyesho.

    Ikiwa unataka kujaza jiji kiotomati mahali fulani kwenye tovuti (kwa mfano, katika fomu ya utaratibu), kisha ujue kitambulisho cha shamba na ubadilishe yaliyomo kwa njia hii:

    jQuery("#mji-mtumiaji").val(ymaps.geolocation.city);