經常瀏覽小視訊或各類貼文的朋友們可能已經註意到,目前許多網路平台都會顯示作者和評論區使用者的IP歸屬地。那麽,這個功能是如何實作的呢?
某些收費平台的API
我們可以利用一些付費平台的API來實作這一功能,比如一些導航軟體的開放平台API等。然而,這些服務通常是收費的,而且免費額度有限,適合測試使用,但如果要在生產環境中使用,很可能不夠支撐需求。
離線庫推薦
那麽,有沒有免費的離線API庫呢?UP現在推薦一個強大的離線庫給大家,一個準確率高達99.9%的離線IP地址定位庫,查詢速度僅需0.0x毫秒,而且資料庫僅10兆字節大小。
「
此庫提供了Java、PHP、C、Python、Node.js、Golang、C#等多種查詢繫結,同時支持Binary、B樹和記憶體三種查詢演算法。
這個庫大家可以在GitHub上搜尋:ip2region,即可找到該開源庫。
使用
下面使用Java程式碼給大家演示下如何使用這個IP庫,該庫目前支持多重主流語言。
1、引入依賴
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>2.7.0</version>
</dependency>
2、下載離線庫檔 ip2region.xdb
3、簡單使用程式碼
下面,我們透過Java程式碼,挑選某個國內的IP進行測試,看看會輸出什麽樣的結果
public class IpTest {
public static void main(String[] args) throws Exception {
// 1、建立 searcher 物件 (修改為離線庫路徑)
String dbPath = "C:\Users\Administrator\Desktop\ip2region.xdb";
Searcher searcher = null;
try {
searcher = Searcher.newWithFileOnly(dbPath);
} catch (Exception e) {
System.out.printf("failed to create searcher with `%s`: %s\n", dbPath, e);
return;
}
// 2、查詢
String ip = "110.242.68.66";
try {
long sTime = System.nanoTime(); // Happyjava
String region = searcher.search(ip);
long cost = TimeUnit.NANOSECONDS.toMicros((long) (System.nanoTime() - sTime));
System.out.printf("{region: %s, ioCount: %d, took: %d μs}\n", region, searcher.getIOCount(), cost);
} catch (Exception e) {
System.out.printf("failed to search(%s): %s\n", ip, e);
}
// 3、關閉資源
searcher.close();
// 備註:並行使用,每個執行緒需要建立一個獨立的 searcher 物件單獨使用。
}
}
輸出結果為:
{region: 中國|0|河北省|保定市|聯通, ioCount: 3, took: 1192 μs}
其中,region的格式為 國家|區域|省份|城市|ISP ,缺省的地域資訊預設是0。
當然,這個庫不只是支持國內的IP,也支持國外的IP。
其他語言可以參考該開源庫的說明文件。
總結
這是一個準確率非常高的離線庫,如果計畫裏有IP定位需求的,可以試下該庫。
>>
END
精品資料,超贊福利,免費領
微信掃碼/長按辨識 添加【技術交流群】
群內每天分享精品學習資料
最近開發整理了一個用於速刷面試題的小程式;其中收錄了上千道常見面試題及答案(包含基礎、並行、JVM、MySQL、Redis、Spring、SpringMVC、SpringBoot、SpringCloud、訊息佇列等多個型別),歡迎您的使用。
👇👇
👇點選"閱讀原文",獲取更多資料(持續更新中)