Kiyoh offline

1
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

3
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.
Advertentie

Met Shopify maak je zelf je eigen webwinkel dankzij meer dan honderd thema’s en de complete appstore. Shopify sluit ook goed aan op dropshippers. De software is technisch volledig SEO-geoptimaliseerd en biedt alle sociale media-integraties. Meer info op Shopify.com.

Re: Kiyoh offline

5
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

6
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!
WebwinkelKeur - Webshop Keurmerk + Klantbeoordelingen: Modern keurmerk, ouderwets vertrouwen. Vanaf €8,95 p/m

Re: Kiyoh offline

7
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.
StoreCore.io

Re: Kiyoh offline

9
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

13
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

14
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

16
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.
Online Dierenspeciaalzaak is het adres voor uw huisdier.
Ohw en... Online Dierenspeciaalzaak BLOG!

Re: Kiyoh offline

18
__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.
StoreCore.io

Re: Kiyoh offline

19
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.
StoreCore.io