Prskavčí blog

Aug 6, 2009 - Comments

Jak na výpadek služby Twitter při použití Zend_Service_Twitter

Během dneška (6.8.2009) byl výpadek služby Twitter a koukal jsem, že mi to položilo php-frameworks.net na kolena.

Jak jsem se zjišťovat co s tím a proč mi to hlásí:

Zend_Http_Client_Adapter_Exception: Unable to Connect to tcp://twitter.com:80. Error #110: Connection timed out in /srv/lib/php/Zend/Http/Client/Adapter/Socket.php on line 213

Tento kód nějak selhal a výpadek nastal dříve, asi to vypadá na nějakou chybu v Zendu, protože se Zend_Service_Twitter_Exception nevrátí i při výpadku spojení jak jsem očekával.

try {
    $twitter = new Zend_Service_Twitter($config->twitter->username, $config->twitter->password);
} catch (Zend_Service_Twitter_Exception $e) {
    $this->logger->err("Exception caught importing twitter: {$e->getMessage()}\n");
}

Řešení je otestovat vlastní připojení předem ke kterému jsem se nakonec uchýlil.

        // Testing connect to twitter
        try {
        $client = new Zend_Http_Client('http://twitter.com', array(
            'maxredirects' => 0,
            'timeout'      => 5));
        $response = $client->request();
        } catch (Zend_Http_Client_Adapter_Exception $e) {
            $this->logger->err("Exception caught connect twitter: {$e->getMessage()}\n");
        }

        // if have $response try connect twitter
        if (isset($response)) {
            try {
                $twitter = new Zend_Service_Twitter($config->twitter->username, $config->twitter->password);
            } catch (Zend_Service_Twitter_Exception $e) {
                $this->logger->err("Exception caught importing twitter: {$e->getMessage()}\n");
            }
            if (isset($twitter)) {
            $response = $twitter->status->friendsTimeline(array("count" => $config->twitter->count));
            $this->view->twitter = $response;
            } else {
            $this->view->twitter = null;
            }
        }