javascript — многократный запрос / возврат данных YQL-json

Я вернулся сюда с этой проблемой:
У меня есть страница API, где я получаю файлы данных сына в ответ на запросы.

Итак, я создал файл js, который получает междоменный json через yql и возвращает данные json, декодированные в строку, которую я передаю php, чтобы вставить в базу данных MySql и вернуть в таблицу.

Так что я знаю, что могу опрашивать API с таким URL-адресом, как этот …. / usd-gold.json, где я получаю информацию об обмене между долларом США и золотом, но если я хочу получить противоположное изменение, мне следует опросить …. /gold-usd.json.

Это вопрос наконец.
Как я могу получить множественный JSON-опрос, чтобы получить обратно данные JSON, декодировать их, объединить, объединить данные и отправить их в php.
Другими словами: как я могу сделать множественный опрос, такой как idr-gold.json, gold-dir.json, usd-gold.json, gold-use.json и т. Д. Для всей валюты, объединить код, передать его в php и работать на MySQL.

Вот код, который я использую для одного запроса.

JS код / ​​файл:

// JavaScript Document
$(document).ready(function(){
var container = $('#target');
$('.ajaxtrigger').click(function(){
doAjax($(this).attr('href'));
return false;
});
function doAjax(url){
// if it is an external URI
if(url.match('^http')){
// call YQL

// TEST

$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20*%20from%20html%20where%20url%3D%22"+
encodeURIComponent(url)+
"%22&format=json'&callback=?",  // QUESTO è URL cui segue la "," e poi function(data)

// this function gets the data from the successful
// JSON-P call
function(data){

// if there is data, filter it and render it out
if(data.results[0]){
var data = filterData(data.results[0]);

container.html(data);
//               alert(data);    // MIO TEST
document.getElementById("prova1").value = data; //MIO

// TEST

var obj = $.parseJSON(data);
document.getElementById("provabis").innerHTML = obj.buy.currency+"/"+obj.sell.currency+" "+obj.offer[0].rate+" "+obj.offer[0].amount+"  "+obj.offer[0].seller.name;
//             alert(obj.sell.currency);

// TEST END

// otherwise tell the world that something went wrong
} else {
var errormsg = "<p>Error: can't load the page.</p>";
container.html(errormsg);
}
}
);
// if it is not an external URI, use Ajax load()
} else {
$('#target').load(url);
}
}
// filter out some nasties
function filterData(data){
data = data.replace(/<body>/,'');
data = data.replace(/<?\/body[^>]*>/g,'');
data = data.replace(/[\r|\n]+/g,'');
data = data.replace(/<--[\S\s]*?-->/g,'');
data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
data = data.replace(/<script.*\/>/,'');
return data;
}
});

Вот HTML-код / ​​файл:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> </meta>
<title>

Under Developement

</title>
<link type="text/css" href="styles.css" rel="stylesheet"></link>

</head>
<body>
<div id="doc" class="yui-t7">
<div id="hd" role="banner">
<h1>
Ajax with jQuery - using YQL
</h1>
</div>
<div id="bd" role="main">
<h2>
Demo
</h2>
<ul>
<li>
<a class="ajaxtrigger" href="ajaxcontent.html">
Load Ajax Content
</a>
</li>
<li>
<a class="ajaxtrigger" href="http://www.API LINK.json">
<!--                       <a class="ajaxtrigger" href="http://www.API LINK.json
</a><br>
<a class="ajaxtrigger" href="http://www.API LINK.json">
<!--                       <a class="ajaxtrigger"  href="http://www.API LINK.json"> -->
Get cspro2.json
</a>
</li>
</ul>
<div id="target">
</div>
<h2>
Formatted List
</h2>
</div>
<div id="prova2">
</div>
<h2>
TEST
</h2>
</div>
<form action="jsontodb10.php" method="post">
Json code: <br>
<textarea id="prova1" style="width:40%;height:40em;" name="jsonCode"> </textarea>
<!-- metti qui il pulsante per submittare al php -->
<br>
<input type="submit">
</form>



<textarea id="provabis" style="width:40%;height:40em;"></textarea>
<script src="http://code.jquery.com/jquery-latest.pack.js">  </script>
<script src="code.js"></script>
<script src="using-yql7.js"></script>




</div>

</body>

</html>

и, наконец, php код / ​​файл:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="table-db.css" rel="stylesheet" type="text/css">
<title>Database show</title>
</head>

<body>
<?php
//inserisci il reset della variabile che non manda in loop il force  update

$submitVerify = $_POST["_Submit"];
if($submitVerify=="force Update"){
//     unset($submitVerify);
echo ("<script type='text/javascript'>location.reload();</script>");
};

//connect to mysql db
$servername = "localhost";
$username = "my user";
$password = "";
$dbname = "my db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully <br />";


// QUI METTIAMO la verifica circa il RecordTime ed il TimeNow (così  che non si registrino più di 1 Record/ 2 hour)
$timeNow = date('Y-m-d H:i:s'); // ora adesso
$time = strtotime($timeNow); // settato l'ora adesso
$timeRange = date('Y-m-d H:i:s',strtotime('-2 hours', $time)); // l'ora adesso -2 ore

$sqlsearchTime = "SELECT DateTimeSave FROM Valuta ORDER BY ID DESC  LIMIT 1";
$searchresultTime = mysqli_query($conn, $sqlsearchTime);

if (mysqli_num_rows($searchresultTime) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($searchresultTime)) {

echo "\n Last record in database was at: " . $row["DateTimeSave"].   "<br>";

if ($row["DateTimeSave"] > $timeRange) // se l'orario estratto dal database è < dell'orario attuale -2 ore
{
echo('hey sono passate meno di due ore, non inserirò un  altro dato a meno che tu non mi forzi <br />');  // allora apri il database  ed inserisci l'ultimo dato ottenuto e mostra il contenuto del database
//                 goto showData;
goto insertData;
}
else                 // se l'orario è maggiore
{
echo('si che possiamo mettere questo nuovo dato nel  database <br />'); // allora mostra solo il contenuto e rimanda a al tasto  che forza l'estrazione del dato e l'inserimento dei dati ne db e mostra  contenuto
goto insertData;
};
}
} else {
echo "0 results";
};

// NOME funzione
insertData:
//VALUES from JSON
//read the json file contents
//$jsondata = file_get_contents('idr-gold.json');
//$jsondata = file_get_contents('idr-gold.txt');

//convert json object to php associative array
//$data = json_decode($jsondata, true);
//get the value details
$content = $_POST["jsonCode"];

//$jsondata = file_get_contents('idr-gold.txt');
//$json = json_decode($content, true);

//convert json object to php associative array
$data = json_decode($content, true);
$buycurrency = $data['buy']['currency'];
$sellcurrency = $data['sell']['currency'];
$sellrate = $data['offer'][0]['rate'];
$sellamount = $data['offer'][0]['amount'];
$sellername = $data['offer'][0]['seller']['name'];
$offer = $data['offer'];

//se l'offerta nulla metti "no record"if($offer === NULL)
{
$sellrate = 'No Record';
$sellamount = 'No Record';
$sellername = 'No Record';
};

//VALUES RECORDSNORECORDS (OK) questo setta se c'è o meno un Record
if($sellername != NULL)
{
$recordsNoRecords = TRUE;
} else {
$recordsNoRecords = FALSE;
};

//VALUES DATE&HOUR (OK) qui setta l'ora dell'inserimento e poi inserisce i dati
date_default_timezone_set('UTC+1');
$timestamp = date('Y-m-d H:i:s');



$sqlinsert = "INSERT INTO Valuta  (BuyCurrency,SellCurrency,SellRate,SellAmount,SellerName,LinktoPage,Records NoRecords,DateTimeSave)
VALUES   ('$buycurrency','$sellcurrency','$sellrate','$sellamount','$sellername','test','$recordsNoRecords','$timestamp')";


if ($conn->query($sqlinsert) === TRUE) {
echo "New record created successfully <br />";
} else {
echo "Error: " . $sqlinsert . "<br>" . $conn->error;
} goto showData;




// NOME funzione
showData:
// QUERY X VEDERE
$sqlsearch = "SELECT BuyCurrency, SellCurrency, SellRate, SellAmount,  SellerName, LinktoPage, DateTimeSave FROM Valuta";
$searchresult = mysqli_query($conn, $sqlsearch);


if (mysqli_num_rows($searchresult) > 0) {

// output data of each row
while($row = mysqli_fetch_assoc($searchresult)) {
echo "\n Currency to buy: " . $row["BuyCurrency"]. " - Currency to  sell: " . $row["SellCurrency"]. " - Sell Rate " . $row["SellRate"]. " -  Amount on sale: " . $row["SellAmount"]. " - Seller Name: " .  $row["SellerName"]. " - Lik to page: " . $row["LinktoPage"]. " - Date &  Time of record: " . $row["DateTimeSave"].  "<br>";
}
} else {
echo "0 results";
};
$conn->close();
?>

<!-- bottone per forzare l'aggiornamento -->

<form name="update" action="" method="post">
se vuoi forza
<input type="submit" name="_Submit" value="force Update">
</form>
<?php
$submit = $_POST["_Submit"];
if($submit=="force Update"){
echo ("facciamolo!");
//     goto insertData;
}else{
echo ("SUCA!!");
//     goto showData;
};
?>

<br />
<br />
<br />
<br />



<?php
// TABELLA
//connect to mysql db
$servername = "localhost";
$username = "";
$password = "";
$dbname = "my db";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully <br />";

$sql = "SELECT    BuyCurrency,SellCurrency,SellRate,SellAmount,SellerName,LinktoPage,DateTime Save FROM Valuta ORDER BY ID DESC LIMIT 1";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo '<table cellpadding="0" cellspacing="0" class="db-table">';
echo '<tr><th>Buy</th><th>Sell</th><th>Rate</th><th>Amount</th> <th>Seller</th><th>Link</th><th>Time Record</th></tr>';
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["BuyCurrency"]."</td> <td>".$row["SellCurrency"]."</td><td>".$row["SellRate"]."</td> <td>".$row["SellAmount"]."</td><td>".$row["SellerName"]."</td> <td>".$row["LinktoPage"]."</td><td>".$row["DateTimeSave"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
};
$conn->close();
?>

</body>
</html>

Спасибо заранее за помощь!

ОБНОВЛЕНИЕ porpose сценария

Преимущество сценария в том, что у меня есть сайт, на котором я могу показать полученные данные из API, который возвращает json или xml.

Поэтому я попробовал способ, который мне показался наиболее простым для извлечения данных JSON (XML был сложнее, если я хорошо понял). Я обнаружил, что YQL легко получить междоменные данные с помощью файлов JSON.

Чем я читаю, так это тем, что ответ json, когда вы пытаетесь получить доступ к разным файлам одновременно, может иметь ограничения скорости передачи, и я проверил, что данные json в реальном времени получают около 1/2 секунды, чтобы дать ответ.

Так вот что я думал.
Я создаю форму js, которая создает URL-адрес для ответа API, я получаю данные бросать YQL, этот код в php и вставляю его в БД. Таким образом, пользователь получает таблицы MySQL с сохраненными данными, несмотря на то, что ему приходится ждать, пока сайт получит все данные в режиме реального времени.

Оптимальной целью для меня будет:
1) иметь БД, которая каждые 4 часа получает json от api;
2) обновить сохраненные данные;
3) когда пользователь Open page может запрашивать дБ или принудительно извлекать данные json в режиме реального времени (обновление дб).

Это последняя свинья.
Спасибо за ваше время.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]