Pagina 1 van 1
Kiyoh offline
Geplaatst: 04 december 2014
door henk-k
De zoveelste storing bij Kiyoh de afgelopen maanden. Ik begin me nu toch een beetje te irriteren. Met enige regelmaat werkt dat ding niet, de website ligt er dan ook helemaal uit. Vandaag is het alweer geruime tijd mis.
Binnenkort toch maar eens kijken hoe we automatisch eens per dag een afbeelding kunnen uploaden ipv elke keer dat ding lagen.
Re: Kiyoh offline
Geplaatst: 04 december 2014
door Ward
De KiyOh-widget is een webpagina in een inline frame. Je kunt dus één keer per dag met een cURL-request daarvan lokaal een kopie opslaan. Daarvoor heb je maar tien regeltjes code in PHP nodig.
Bijvoorbeeld:
http://davidwalsh.name/curl-download
Re: Kiyoh offline
Geplaatst: 04 december 2014
door henk-k
Het was eigenlijk meer een kwestie van gemakzucht om het zo te laten

Ik ben inderdaad bekend met curl, vanavond (als Kiyoh het weer gaat doen) toch maar even iets in elkaar prutsen.
Re: Kiyoh offline
Geplaatst: 04 december 2014
door Jan Roelofsen
Wat Ward nu precies heeft heb ik niet. Echter werkt de widget bij ons wel, maar doorklikken geeft inderdaad geen resultaat..
Re: Kiyoh offline
Geplaatst: 04 december 2014
door Ward
Probleem is dat je webpagina door een

smiley wordt ontsiert als Chrome de content van KiyOh niet kan laden.
Ik heb eerder al eens aan een oplossing geknutseld om twee andere redenen: KiyOh plaatst trackingcookies (en dan moet je in de weer met cookiewaarschuwingen) en de KiyOh-server is bij vlagen sloom, waardoor je eigen webpagina's traag lijken te laden.
En dan hebben we ook nog een keer meegemaakt dat het netwerk waarin de KiyOh-server draait door malware was getroffen. Dát wil je je klanten ook niet aandoen: het risico dat ze via een "partner" een virus, keylogger, trojan of iets anders kwaadaardigs oplopen.
Re: Kiyoh offline
Geplaatst: 04 december 2014
door libertes
Wij hadden ook een koppeling met Kiyoh om onze eigen klantbeoordelingen onafhankelijk te verzamelen. Dit hadden we ook gedaan met Curl, maar helaas ging Curl onderuit doordat de url niet beschikbaar is en curl wel wachte op resultaat.
Test dus wel even heel goed je Curl code en kijk wat er gebeurt als je een niet bestaande url toevoegd. Voeg bij voorkeur ook curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,3); toe waarbij 3 staat voor het aantal seconden dat je maximaal wilt wachten op de request... Mocht je dit met een cronjob doen en niet met caching op de pagina zelf, dan is dat trouwens nog mooier.
Succes!
Re: Kiyoh offline
Geplaatst: 04 december 2014
door Ward
Het hoeft niet eens met een cronjob. Ik hang zelf bepaalde onderhoudstaken bijvoorbeeld wel eens aan de logoff van de admin: werk gedaan, dan update de logoff de cache.
Verder is het geen rocket science. Je geeft de cachebestanden gewoon een datum mee:
20141204_kiyoh_cache.html (vandaag)
20141203_kiyoh_cache.html (gisteren)
20141202_kiyoh_cache.html (eergisteren)
enzovoort...
Daarna hoef je de cache alleen te updaten via cURL als er voor de huidige datum nog geen cachebestand is. Mislukt de cURL-request, dan is het resultaat van
exec() false en kun je dus een ouder bestand uit de cache hengelen.
Re: Kiyoh offline
Geplaatst: 04 december 2014
door henk-k
De timeout lijkt me vrij logisch, het hele gedoe is er omdat Kiyoh om de haverklap offline is

Re: Kiyoh offline
Geplaatst: 04 december 2014
door henk-k
Zo, klaar. Script controleert of de Kiyoh website überhaupt iets doet en haalt dan de html bestanden binnen. Komt er geen response, dan blijven de oude bestanden staan.
Voor zo ver ik kan zien worden er in de html geen externe bestanden meer geladen.
Re: Kiyoh offline
Geplaatst: 08 december 2014
door libertes
Wellicht kunnen jullie de code delen, scheelt weer voor anderen

.
Re: Kiyoh offline
Geplaatst: 08 december 2014
door Dierenspeciaalzaak
Ik heb inderdaad nu ook de widget lokaal staan. Die is gekoppeld aan een cronjob om te downloaden. Ik zou jullie wel adviseren om als je het via CURL ophaalt de locatie van de widget wel uit de webroot te halen en dan deze via een klein PHP bestandje server side in laadt. Dat is wel zo veilig. Verder natuurlijk geweldige tip

Re: Kiyoh offline
Geplaatst: 09 december 2014
door Dennis1
Dit zou ik ook wel willen hebben.
De code delen zou super zijn natuurlijk.
Hoeven we alleen maar aan te passen naar onze eigen behoefte en klaar.
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Royk
Hmm.. ik was Kiyoh aan het overwegen omdat ik nu bij webwinkelkeur mijn beoordelingen aan het opsparen ben. Misschien niet verkeerd om die twee banen te scheiden (winkelkeur / beoordelingen) mocht er ooit een keuze gemaakt worden om weg te gaan bij de desbetreffende winkelkeur
maar deze berichten maken me er ook niet echt warm voor haha
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Mick
Royk schreef:Hmm.. ik was Kiyoh aan het overwegen omdat ik nu bij webwinkelkeur mijn beoordelingen aan het opsparen ben. Misschien niet verkeerd om die twee banen te scheiden (winkelkeur / beoordelingen) mocht er ooit een keuze gemaakt worden om weg te gaan bij de desbetreffende winkelkeur
maar deze berichten maken me er ook niet echt warm voor haha
Gelukkig zijn er meerdere aanbieders op de markt!
Wij twijfelen juist om over te stappen naar winkelkeur, omdat we bij een externe partij inmiddels behoorlijk wat beoordelingen hebben...
Google telt de reviews van de diverse platformen (van het afgelopen jaar) bij elkaar op, maar het is natuurlijk prettiger om 1 platform met veel reviews te hebben i.p.v. verschillende platforms met enkele reviews!
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Dennis1
Wij hebben ze beiden.
Kiyoh voor de beoordelingen en Webwinkelkeur voor het keurmerk.
Webwinkelkeur verzameld ook gewoon de beoordelingen van Kiyoh, dus daar zit geen dubbel werk in.

Re: Kiyoh offline
Geplaatst: 09 december 2014
door Dierenspeciaalzaak
Dennis1 schreef:Dit zou ik ook wel willen hebben.
De code delen zou super zijn natuurlijk.
Hoeven we alleen maar aan te passen naar onze eigen behoefte en klaar.
Ogh kan in een handje vol regels...
Als het voor widget is doe je
gaat er vanuit, dat dit script aangeroepen wordt vanuit web root en er ook een private naast de webroot bestaat.. dirname(dirname(__FILE__)) is hetzelfde als wat je in DOS deed als je dir .. typte. Controleert of download van Widget echt gelukt is en slaat het om veiligheidsredenen dan op als .txt bestand.
Dit is dus widget downloaden:
<?
$html = file_get_contents(URL VAN WIDGET HIER TUSSEN AANHALINGSTEKENS NEER ZETTEN);
if($html) file_put_content(dirname(dirname(__FILE__)) . '/private/kiyoh.txt',$html);
?>
Vervolgens doe je dan om widget aan te roepen een bestandje in webroot zetten met (ik gebruik hier als naam kiyoh.php, ga ik in verder voorbeeld ook vanuit):
Dat is dus widget weergeven vanuit private mapje
<?
$html = file_get_contents(dirname(dirname(__FILE__)) . '/private/kiyoh.txt');
echo $html;
?>
Moet je uiteraard wel write permission op private ook zetten...
Widget zelf moet je dan de URL voor aanpassen naar de naam van het bestandje om de widget aan te roepen.
Krijg je bijvoorbeeld:
<iframe scrolling="no" src="/kiyoh.php" style="margin:0px 0px 0px 20px; width:180px; height:117px; overflow:hidden;" width="180" height="117" frameborder="0"></iframe>
Dan moet je ook nog even een cronjob op de server instellen voor bijvoorbeeld elk uur die de widget dan download. Anders update je widget nooit, dat kan de bedoeling niet zijn.
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Dennis1
Dat ziet er niet al te lastig uit inderdaad.
De __FILE__ is dan het complete path of alleen maar vanuit de root van de site?
Hier ga ik straks zeker even mee stoeien!
Dank je.
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Ward
__FILE__ is een magische constante met het volledige pad, inclusief bestandsnaam, van het huidige PHP-script. Je hoeft daarop niet
dirname() los te laten: gebruik gewoon
__DIR__ voor de huidige directory.
Op een streng (goed) beveiligde webserver werkt
file_get_contents() niet altijd met URL's, omdat je daarmee externe bestanden lokaal kunt uitvoeren. Werkt
file_get_contents() inderdaad niet, gebruik dan
cURL.
Re: Kiyoh offline
Geplaatst: 09 december 2014
door Ward
Plaats dit class-bestand ergens in je library:
Code: Selecteer alles
<?php
namespace KiyOh;
/**
* Cached KiyOh Widget
*
* @author Ward van der Put <Ward.van.der.Put@gmail.com>
* @license http://www.gnu.org/licenses/gpl.html GPLv3
* @version 1.0.0-beta.1
*/
class Widget
{
/**
* @type string KIYOH_WIDGET_URI
* Set this path to a company-specific URL.
*/
const KIYOH_WIDGET_URI = 'https://www.kiyoh.nl/widget.php?company=2768';
/**
* @type string $Document
*/
private $Document = '';
/**
* Constructor
*
* @param void
* @return void
*/
public function __construct()
{
$this->update();
$this->setDocument();
}
/**
* Convert the widget object to a string.
*
* @param void
* @return string
*/
public function __toString()
{
return $this->getDocument();
}
/**
* Display the KiyOh HTML page.
*
* @param void
* @return string
*/
public function getDocument()
{
return $this->Document;
}
/**
* Load the KiyOh HTML page.
*
* @param void
* @return void
*/
private function setDocument()
{
// First try to get todays cache file
$cache_file = 'kiyoh_cache_' . date('Ymd') . '.txt';
if (file_exists($cache_file)) {
$this->Document = file_get_contents($cache_file);
return;
}
// Next try to get older cache files
for ($days = -1; $days > -7; $days--) {
$cache_file = 'kiyoh_cache_' . date('Ymd', strtotime($days . ' day')) . '.txt';
if (file_exists($cache_file)) {
$this->Document = file_get_contents($cache_file);
return;
}
}
}
/**
* Update the KiyOh widget cache.
*
* @param void
*
* @return null|bool
* Returns null if the cache does not need to be updated. Returns
* false if the cURL connection fails and the cache could not be
* updated, otherwise true.
*/
private function update()
{
$cache_file = 'kiyoh_cache_' . date('Ymd') . '.txt';
if (file_exists($cache_file)) {
return null;
}
// Create a cURL request handler
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::KIYOH_WIDGET_URI);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Handle the cURL request
$response = curl_exec($ch);
if ($response === false) {
return false;
} else {
curl_close($ch);
unset($ch);
}
// Cache the response in a file cache
if (empty($response)) {
return false;
} else {
$fh = fopen($cache_file, 'w');
if ($fh === false) {
return false;
} elseif (fwrite($fh, $response) === false) {
return false;
} else {
fclose($fh);
return true;
}
}
}
}
Daarna kun je hiermee in bijvoorbeeld
/kiyoh/index.php als volgt een widget uit de cache weergeven:
Code: Selecteer alles
<?php
// Load the KiyOh widget class file:
// point the path to a location in your library
require 'Widget.php';
// Display the cached KiyOh widget
$kiyoh_widget = new \KiyOh\Widget();
echo $kiyoh_widget->getDocument();
Het enige dat je hierna nog hoeft te doen, is in het inline frame de URL op
/kiyoh/index.php of kortweg
/kiyoh/ instellen.
De caching staat ingesteld op 1 update per dag, maar je kunt dit tweaken naar bijvoorbeeld 1 update per uur. Verder heb je voor deze oplossing geen cronjob nodig: de widget-class onderhoudt zijn eigen cache zelf.