api_key = $api_key; $this->secret = $secret; } function uri_to_login() { $param = 'api_key=' . urlencode($this->api_key()); $param .= '&api_sig=' . urlencode($this->api_sig()); return $this->auth_url . '?' . $param; } function uri_to_auth() { $param = 'api_key=' . urlencode($this->api_key()); $param .= '&cert=' . urlencode($this->cert()); $param .= '&api_sig=' . urlencode($this->api_sig()); # return $this->api_url . '?' . $param; return $param; } function cert() { return $this->cert; } function api_key() { return $this->api_key; } function api_sig() { $this->api_sig = md5( $this->_request() ); return $this->api_sig; } function _request() { $ret = $this->secret . 'api_key' . $this->api_key; if ($this->cert != '') { $ret .= 'cert' . $this->cert; } return $ret; } function login($cert = '') { $this->cert = $cert; $url = $this->uri_to_auth(); $ret = $this->_fopen($url,'r'); return $ret; # if (!$fh) { # // ERROR # } else { # $res = fread($fh, 8192); # } # return $res; } function _fopen($param) { $url = 'auth.hatena.ne.jp'; $ret = ''; $fp = fsockopen($url, 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)
\n"; } else { $out = "GET /api/auth.json?$param HTTP/1.1\r\n"; $out .= "Host: auth.hatena.ne.jp\r\n"; $out .= "Connection: Close\r\n\r\n"; $body = 0; $ret = ''; fwrite($fp, $out); while (!feof($fp)) { $tmp = fgets($fp, 2048); if (($body != 1) && (preg_match("/^\r$/",$tmp))) { $body = 1; next; } if ($body) { $ret .= $tmp; } } fclose($fp); } $json = new Services_JSON(); $val = $json->decode($ret); if ($val->has_error != '') { $result = FALSE; } else { $this->name = $val->user->name; $this->image_url = $val->user->image_url; $this->thumbnail_url = $val->user->thumbnail_url; $result = TRUE; } return $result; } function name() { return $this->name; } function image_url() { return $this->image_url; } function thumbnail_url() { return $this->thumbnail_url; } }