我目前正在使用返回 JSON 对象的 API。我按点击次数付费,所以我想尽量减少我的点击次数。我使用这个对象来填充我页面上的图像和文本。返回的对象与 iTunes 查找命中非常相似。
我的代码的简化版本是这样的:
<img id="test" src="" alt="Image" />
<script>
$.getJSON( "https://itunes.apple.com/lookup?id=284910350", function( data ) {
document.getElementById('test').setAttribute("src", data.results[0].screenshotUrls[0]);
});
</script>
每次用户打开此页面时,都会向服务器发送一个请求,并且会向我的帐户添加一个点击(很明显)。我想将该对象暂时存储在我自己的服务器上,这样我就可以一次请求数据,并为用户提供“本地”版本。做这个的最好方式是什么?是否可以每周左右自动更新文件?
提前致谢!
最佳答案
这是一项简单的 cron 工作。假设您可以在您的服务器中执行 bash 脚本:
1 - 在您的服务器中放置一个名为 fetchItune.sh
的 bash 脚本。这个脚本的内容基本上存储了一些对外部 API 的 curl 请求:
#!/bin/sh
curl -H "Accept: application/json" https://itunes.apple.com/lookup\?id\=284910350 -o /path/to/storage/data.json
您可以喜欢这个脚本,例如将端点列表放在一个数组中或输出到不同的文件等。但核心是确保它们是接受 JSON 响应的有效 HTTP 请求。
2 - 设置一个 cron 作业以每周执行一次。如果您使用的是 Ubuntu 服务器,它可能就像将此脚本放入 /etc/cron.weekly
一样简单。否则,请搜索您的服务器文档。我确定有一个关于 cron 作业的部分。
3 - 从您的 JavaScript 请求您的服务器端点而不是外部 API:
<script>
$.getJSON( "/path/to/storage/data.json", function( data ) {
document.getElementById('test').setAttribute("src", data.results[0].screenshotUrls[0]);
});
</script>
编辑:您可以编写 PHP 脚本而不是 bash 脚本来向外部 API 发出请求。原理是一样的。我直接从 PHP curl 文档中获取:http://php.net/manual/en/curl.examples-basic.php
<?php
$ch = curl_init("https://itunes.apple.com/lookup\?id\=284910350");
$fp = fopen("/path/to/storage/data.json", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
关于php - 定期下载外部 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014192/