Php 在后台(LinuxWget)写入来自web服务的数据库JSON响应
我有个大问题。我在jQuery中编写了这个脚本,它通过设置JSON从webservice获取数据,webservice通过响应也以JSON的形式向我发回数据。 代码如下所示:Php 在后台(LinuxWget)写入来自web服务的数据库JSON响应,php,jquery,json,ajax,wget,Php,Jquery,Json,Ajax,Wget,我有个大问题。我在jQuery中编写了这个脚本,它通过设置JSON从webservice获取数据,webservice通过响应也以JSON的形式向我发回数据。 代码如下所示: function Product(date_from,date_to,API_KEY) { var self = this; self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01 :00&
function Product(date_from,date_to,API_KEY) {
var self = this;
self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01 :00&ToDate='+date_to+' 00:01:00';
self.products = new Array();
self.productsDiv = "#products";
self.getAllProducts = function () {
var req = self.pobierz_dane_ajax(self.productURI, "GET");
req.done(function (data) {
self.products = data;
var dataString = JSON.stringify(data);
$.ajax({
type: 'POST',
url: 'write_transactions.php',
data: {
save_transaction: dataString,
date_from: date_from
}
});
});
}
self.pobierz_dane_ajax = function (uri, method, data) {
var request = {
url: uri,
type: method,
contentType: "application/json",
accepts: "application/json",
dataType: 'json',
data: JSON.stringify(data),
crossDomain: true,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + API_KEY);
}
};
return $.ajax(request);
}
<script type="text/javascript">
var product = new Product('<?php echo $date_from; ?>','<?php echo $date_to; ?>','<?PHP echo $DE_API; ?>');
product.getAllProducts();
}
我这样调用我的函数:
function Product(date_from,date_to,API_KEY) {
var self = this;
self.productURI = 'https://api.xxxxxxxxxxxxxxxxxxx/DailySales?FromDate='+date_from+' 00:01 :00&ToDate='+date_to+' 00:01:00';
self.products = new Array();
self.productsDiv = "#products";
self.getAllProducts = function () {
var req = self.pobierz_dane_ajax(self.productURI, "GET");
req.done(function (data) {
self.products = data;
var dataString = JSON.stringify(data);
$.ajax({
type: 'POST',
url: 'write_transactions.php',
data: {
save_transaction: dataString,
date_from: date_from
}
});
});
}
self.pobierz_dane_ajax = function (uri, method, data) {
var request = {
url: uri,
type: method,
contentType: "application/json",
accepts: "application/json",
dataType: 'json',
data: JSON.stringify(data),
crossDomain: true,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + API_KEY);
}
};
return $.ajax(request);
}
<script type="text/javascript">
var product = new Product('<?php echo $date_from; ?>','<?php echo $date_to; ?>','<?PHP echo $DE_API; ?>');
product.getAllProducts();
var产品=新产品(“”,“”,“”);
product.getAllProducts();
在PHP脚本中,我用PHP解析JSON并将其写入数据库
当我通过网页(Chrome、Firefox)调用整个过程时,一切都正常。当我在Linux中的crontab中通过以下方式调用它时,问题开始出现:
wget-O-“https…………”
但它就是不起作用。
我需要在后台启动此脚本,因此我需要更好的解决方案….如果我正确理解了您的问题,请立即与您联系
- 通过浏览器调用网页
- 该网页使用JS(ajax)从外部api获取数据
- 解析响应并将其发送到附加的PHP脚本(将数据保存到数据库)
- PHP脚本从API获取数据
- 相同的脚本将数据保存到数据库
- cronjob经常使用wget调用php脚本
<?php
$options = array(
'http' => array(
'method' => 'GET',
'header' => array(
'Authorization: Basic ' . $API_KEY,
'Content-type: application/json'
)
)
);
$context = stream_context_create($options);
$response = file_get_contents($API_URL, false, $context);
//work with response / save to db
是啊!这太容易了:D 我正在为其他人发布我的解决方案:D
$remote_url = 'https://api.xxxxxxxxxxxxxx';
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header' => "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);
print($file);
感谢您的回答:)我考虑过完全用PHP重写它,但我不知道如何通过PHP传递GET和header,所以这部分:var request={url:uri,type:method,contentType:“application/json”,接受:“application/json”,数据类型:'json',data:json.stringify(data),crossDomain:true,beforeSend:function(xhr){xhr.setRequestHeader(“Authorization”,“Basic”+API_KEY);};返回$.ajax(请求);在我的回答中查看我的编辑-使用file_get_contents(或者curl作为替代),应该很容易获取api数据