2015-05-03 4 views
3

В настоящее время я использую API, который возвращает объект JSON. Я плачу за хит, поэтому я хотел бы свести к минимуму мои хиты. Я использую этот объект для заполнения изображений и текста на своей странице. Возвращаемый объект очень похож на удаленный поиск itunes.Регулярно загружайте внешний JSON

упрощенная версия моего кода заключается в следующем:

<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> 

Каждый раз, когда пользователи открывает эту страницу, запрос отправляется на сервер и удар будет добавлен на мой счет (очевидно). Я хотел бы временно хранить объект на моем собственном сервере, чтобы я мог запросить данные один раз и предоставить пользователю «локальную» версию. Каков наилучший способ сделать это? Возможно ли, чтобы файл обновлялся каждую неделю или около того автоматически?

Заранее благодарен!

+0

Вы должны были бы иметь свой 'getJSON' вызов попал конечную точку на вашем собственном сервере, который может проверить локальный кэш. Если кеш является устаревшим или не имеет значения, он (сервер) делает вызов в iTunes для обновления кеша. –

ответ

0

Это простая работа cron. Предполагая, что вы можете выполнить скрипт bash на своем сервере:

1 - На вашем сервере установите сценарий bash под названием fetchItune.sh. Содержание этого сценария в основном сохраняет некоторые завитки запросов за пределы API:

#!/bin/sh 
curl -H "Accept: application/json" https://itunes.apple.com/lookup\?id\=284910350 -o /path/to/storage/data.json 

Вы можете получить фантазии с этим сценарием, например размещение списка конечных точек в массиве или вывод в разные файлы и т. д., но в основном, просто убедитесь, что они являются действительными HTTP-запросами, которые принимают ответ JSON.

2 - Настройте задание cron, чтобы сделать это еженедельно. Это может быть так же просто, как поставить этот скрипт в /etc/cron.weekly, если вы используете сервер Ubuntu. В противном случае выполните поиск в документации по серверу. Я уверен, что есть раздел о работе cron.

3 - Ваш JavaScript Ваш запрос на конечную точку сервера вместо внешнего API:

<script> 
    $.getJSON("/path/to/storage/data.json", function(data) {   
     document.getElementById('test').setAttribute("src", data.results[0].screenshotUrls[0]); 
    }); 
</script> 

EDIT: Вы можете написать скрипт, чтобы сделать запрос к внешнему API вместо Баш скрипт. Принцип тот же. Я беру это непосредственно из PHP локон документации: 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); 
?> 
+0

Можно ли обновить этот скрипт bash из php-файла? Я хотел бы использовать базу данных MySQL, которая содержит номера идентификаторов для добавления файлов JSON. – Rijk

+0

С уважением, я не видел тег PHP. Тогда хорошо, не пишите сценарий bash. Вместо этого используйте PHP curl: http://php.net/manual/en/book.curl.php, но принцип тот же. Позвольте мне обновить свой ответ с помощью кода. –

+0

@RijkvanZanten Я обновил свой ответ с помощью скручивания PHP. Но, пожалуйста, имейте в виду, что я не написал PHP-скрипт через 3 года, так что это только пример :( –