2011-11-27 30 views
7

Tôi có danh sách khoảng 200.000 địa chỉ IP. Tôi muốn liên kết chúng với vị trí địa lý và nhận được bất kỳ dữ liệu nào khác mà địa chỉ IP cũng có thể cung cấp.Gói R cho mã zip và geodata khác từ địa chỉ IP?

Điều tốt nhất tôi đã tìm thấy cho đến nay là dịch vụ được cung cấp bởi infochimps: http://www.infochimps.com/datasets/digital-element-ip-intelligence-demographics Ngoài ra còn có gói R cho infochimps. Nhưng infochimps yêu cầu bạn phải trả tiền và cho 200.000 địa chỉ IP, điều này có thể tốn kém.

Có gói R nào có thể làm điều gì đó như thế này không?

Cảm ơn bạn

Trả lời

6

Hãy thử sử dụng RDSTK gói, trong đó cung cấp một giao diện R để API dữ liệu Khoa học Toolkit. Dưới đây là một tác giả của gói, giúp bạn bắt đầu một presentation.

Từ ý kiến ​​Xu Wang (di chuyển ở đây để tăng findability tương lai): Đối với mục đích tham khảo: Để cài đặt gói phần mềm đó, người ta phải cài đặt RCurl và rjson. Trước khi cài đặt RCurl, trên Ubuntu tôi phải cài đặt hai gói: sudo apt-get install curl libcurl4-gnutls-dev Chức năng mà tôi cần là ip2coordinates, mà chấp nhận địa chỉ IP làm đầu vào

+2

cảm ơn bạn, điều này dường như làm việc tuyệt vời. Để tham khảo: Để cài đặt gói đó, bạn phải cài đặt 'RCurl' và 'rjson'. Trước khi cài đặt 'RCurl', trên Ubuntu tôi phải cài đặt hai gói: ' sudo apt-get install curl libcurl4-gnutls-dev' Chức năng mà tôi cần là 'ip2coordinates', chấp nhận địa chỉ IP làm đầu vào –

2

Chức năng IPtoXY (http://thebiobucket.blogspot.com/2011/12/function-to-collect-geographic.html) sử dụng cùng một API nhưng không cần gói bổ sung. .

Edit, 26 Tháng 9: Nhờ @ Peter MI trở thành nhận thức được rằng chức năng của tôi đề cập ở trên không hoạt động nữa - đây là phiên bản thay đổi nội dung mà nên làm việc (cũng liên kết ở trên đã được cập nhật ..):

# Purpose: Get geographic coordinates for a given IP-address 
# Author: Kay Cichini 
# Date: 2011-12-18 
# Output: A string holding longitude and latitude with format "X;Y" 

IPtoXY <- function(x) { 
    URL_IP <- paste("http://www.datasciencetoolkit.org//ip2coordinates/", 
        x, sep = "") 

    api_return <- readLines(URL_IP, warn = F) 
    lon1 <- api_return[grep("longitude", api_return)] 
    lon <- gsub("[^[:digit:].]", "", lon1) 
    lat1 <- api_return[grep("latitude", api_return)] 
    lat <- gsub("[^[:digit:].]", "", lat1) 
    return(paste(lat, lon, sep = ";")) 
} 

# Example: 
> IPtoXY("74.88.200.52") 
[1] "40.951301574707;73.78759765625" 
1

Chức năng từ: http://thebiobucket.blogspot.com/2011/12/function-to-collect-geographic.html, không hoạt động.

Nhưng ý tưởng vẫn làm, vì thế này nên làm:

iplocation <- function(ip=""){ 
    response <- readLines(paste("http://www.datasciencetoolkit.org//ip2coordinates/",ip,sep="")) 
    success  <- !any(grepl("null",response)) 

    ip <- grep("[[:digit:]]*\\.[[:digit:]]*\\.[[:digit:]]*\\.[[:digit:]]*",response,value=T) 
    match <- regexpr("[[:digit:]]*\\.[[:digit:]]*\\.[[:digit:]]*\\.[[:digit:]]*",ip) 
    ip <- substr(ip,match,as.integer(attributes(match)[1])+match-1) 
    if(success==T){ 
    extract <- function(label,response){ 
      text <- grep(label,response,value=T) 
      match <- regexpr(paste('"',label,'"',": ",sep=""),text) 
      text <- substr(text,match+as.integer(attributes(match)[1]),nchar(text)) 
      if(grepl("[[:digit:]]",text)){ 
        text <- substr(text,1,nchar(text)-2) 
      }else{ 
        text <- substr(text,2,nchar(text)-2) 
       } 
      if(regexpr('"',text)!= -1){ 
       text<-substr(text,2,nchar(text)) 
      } 
      print(text) 
      text 
     } 
    } 
    RESULT <- list() 
    RESULT$success  <- success 
    RESULT$ip   <- ip 
    if(success==T){ 
    RESULT$latitude <- as.numeric(extract("latitude",response)) 
    RESULT$longitude <- as.numeric(extract("longitude",response)) 
    RESULT$country  <- extract("country_name",response) 
    RESULT$locality <- extract("locality",response) 
    RESULT$postalcode <- extract("postal_code",response) 
    RESULT$region  <- extract("region",response) 
    RESULT$countrycode <- extract("country_code3",response) 
    } 
    RESULT 
} 

iplocation() 
+0

Peter M, cảm ơn vì đã chỉ vào lỗi của tôi .. – Kay

1

Gần đây tôi đi qua ipinfo.io cho nhìn lên địa chỉ IP. Tôi chỉ sử dụng thư viện RCurl để xử lý các:

R> library(RCurl) 
R> getURL("http://ipinfo.io/74.125.227.224") 
[1] "{\n \"ip\": \"74.125.227.224\",\n \"hostname\": \"dfw06s38-in-f0.1e100.net\",\n \"city\": \"Mountain View\",\n \"region\": \"California\",\n \"country\": \"US\",\n \"loc\": \"37.4192,-122.0574\",\n \"org\": \"AS15169 Google Inc.\",\n \"postal\": \"94043\"\n}" 

Các yêu cầu có thể được sửa đổi nếu quan tâm trong mã chỉ bưu ví dụ:

R> getURL("http://ipinfo.io/74.125.227.224/postal") 
[1] "94043\n" 
Các vấn đề liên quan