【PHP】PC、スマホ(Android、iPhone)のUAを簡単に切り替えてWebページにアクセス出来るSocketクラスを作った。

超絶自分用。

<?php

class Socket {
    
    private $connect;
    
    private $ua;
    
    private $url;
    
    private $redirectCount;
    
    public function __construct()
    {
        $this->connect = curl_init();
    }
    
    public function get($autoReboot = true)
    {
        $this->setOptions();
        
        $contents = curl_exec($this->connect);
        
        $this->redirectCount = curl_getinfo($this->connect, CURLINFO_REDIRECT_COUNT);
        
        curl_close($this->connect);
        
        if ($autoReboot) {
            $this->reboot();
        }
        
        return $contents;
    }
    
    public function setUrl($url)
    {
        $this->url = $url;
        
        return $this;
    }
    
    /**
     * default user agent
     * @return Socket
     */
    public function setPcUa()
    {
        $this->ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36';
        
        return $this;
    }
    
    /**
     * custom user agent
     * @param string $isAndroid
     * @return Socket
     */
    public function setSpUa($isAndroid = false)
    {
        if ($isAndroid) {
            $this->ua = 'Mozilla/5.0 (Linux; U; Android 4.1.1; ja-jp; Galaxy Nexus Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30';
        } else {
            $this->ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4';
        }
        
        return $this;
    }
    
    public function reboot()
    {
        $this->connect = curl_init();
        $this->setPcUa();
        $this->resetUrl();

        return $this;
    }
    
    public function getLastRedirectCount()
    {
        return $this->redirectCount;
    }
    
    private function resetUrl()
    {
        $this->url = null;
    }
    
    private function setOptions()
    {
        $this->validation();
        
        curl_setopt($this->connect, CURLOPT_URL, $this->url);
        curl_setopt($this->connect, CURLOPT_USERAGENT, $this->ua);
        curl_setopt($this->connect, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($this->connect, CURLOPT_TIMEOUT, 10);
        curl_setopt($this->connect, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->connect, CURLOPT_FAILONERROR, true);
        curl_setopt($this->connect, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($this->connect, CURLOPT_AUTOREFERER, true);
    }
    
    private function validation()
    {
        try {
            if (empty($this->url)) {
                throw new RuntimeException();
            }
        } catch (Exception $e) {
            die('Please set the url.');
        }
    }
    
}

使い方は下記の通り。

$socket = new Socket();

$url = 'http://www.yahoo.co.jp';

$result = $socket->setUrl($url)->get();

// リダイレクトカウントも取れるよ
$socket->getLastRedirectCount()

まぁメリットはcurlを使っているのでfile_get_contents()よりも速いよってくらいかな。