【发布时间】:2019-04-15 17:01:02
【问题描述】:
我有一个包含列的“用户”表:
Id | user_id | name | ip_address | lat | lng
id 列、user_id、name 和 ip_address 已填充,现在有 100k 用户。 现在已经创建了 lat(纬度)和 lng(经度)列,我需要从 IP 填充它们(您无法获取用户的地理位置)。 我不想要精确的位置,只想要大概的位置,所以我需要一个脚本来获取每个用户的IP,以某种方式提取纬度和经度,然后插入到数据库中。
我看过“http://www.geoplugin.net/xml.gp?ip=”和“http://ip-api.com/json/”,但我不知道如何为 10 万用户使用 api,也不知道如何使用 PHP 或 mysql 代码或 shell。
我只使用 PHP、MySQLi 和 MySQL 数据库。该应用程序将显示“附近”(半径 100 英里内)的用户列表。
对不起,我对编程很陌生,我真的不知道如何解决这个问题。
编辑:
我刚刚创建了一个 api,它在一个数组中返回所有 user_id 和它们各自的 IP。 只是 105k 的记录,对于 json,它很轻,但我不想在这里公开分享 json,因为这与解释我的用户数据相同。 api 的结果是这样的:
{
"api_status": 200,
"ips": [
{
"user_id": "1",
"ip_address": "177.198.86.7x"
},
{
"user_id": "21",
"ip_address": "177.18.246.9x"
},
{
"user_id": "52",
"ip_address": "177.36.60.1x"
}
]
}
我正在使用以下函数在 php 中返回我的数据
function List_ip() {
global $sqlConnect, $db;
if ($db['loggedin'] == false) {
return false;
}
$ips = mysqli_query($sqlConnect, "SELECT `user_id` , `ip_address` FROM " . T_USERS . " WHERE `active` = '1'");
while ($fetched_data = mysqli_fetch_assoc($ips)) {
$list_ip[] = array_map('utf8_encode', $fetched_data);
}
return $list_ip;
}
【问题讨论】:
-
ip-api 仅允许每分钟来自 IP 地址的 150 个请求。如果超出此范围,您的 IP 地址将被列入黑名单。要获取数据,您可以使用 PHP CURL
-
您将需要学习如何在 php 中使用外部 API,您的问题中没有太多关于您使用哪些其他框架来显示此数据的信息。对于这样的一次性工作,您也可以编写一个简单的控制台或节点应用程序。
-
感谢支持,不知道这个限制。所以我必须做一个限制每秒请求数的脚本,对吗?是否有示例说明如何发出 cURL 请求并施加每秒限制?
-
Adil H. Raza 我没有使用框架。该应用程序是用纯 PHP 开发的,并用作应用程序后端。项目只使用纯PHP、mysqli和数据库mysql。
标签: php mysql geolocation