service = $service; } /* if ( isset($_SESSION[ $this -> session_var_auth_name ] ) ){ $this -> auth = $_SESSION[ $this -> session_var_auth_name ]; echo "Loading"; } else { */ $this -> clientLogin( $email, $password ); $this -> get_token(); /* } */ } private function request( $url, $type = 'get', $headers = false, $fields = false, $cookie = false){ $curl = curl_init(); if ( $fields ){ if ($type == 'get'){ $url .= '?'.http_build_query( $fields ); } else { curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($fields) ); } } if ( $headers ){ curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } if ( $cookie ){ curl_setopt($curl, CURLOPT_COOKIE, $cookie); } curl_setopt($curl, CURLOPT_URL, $url); if (strpos($url, 'https://') !== false){ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLINFO_HEADER_OUT, true); $response = array(); $response['text'] = curl_exec($curl); $response['info'] = curl_getinfo( $curl); $response['code'] = curl_getinfo( $curl, CURLINFO_HTTP_CODE ); $response['body'] = substr( $response['text'], $response['info']['header_size'] ); curl_close( $curl ); return $response; } private function request2google( $url, $type = 'get', $headers = false, $fields = false ){ if ( $this -> auth ){ $headers[] = 'Content-type: application/x-www-form-urlencoded'; $headers[] = 'Authorization: GoogleLogin auth='.$this -> auth; if ( strpos( $url, 'http://') === false && strpos( $url, 'https://' ) === false ){ $url = $this -> reader_api_url.$url; } $response = $this -> request( $url, $type, $headers, $fields); if ( $response['code'] == 200 ){ if ( isset( $fields['output'] ) ){ switch ($fields['output']){ case 'xml': return (new SimpleXMLElement( $response['body'] ) ); break; case 'json': default: return json_decode( $response['body'] ); break; } } else { return $response['body']; } } else { Throw new AutentificationException('Auth error: server response '.$response['code'] ); } } else { Throw new AutentificationException('Auth error: not finded Auth token'); } } public function get_tag_list( $output = 'json' ){ return $this -> request2google('tag/list', "get", false, array( 'output' => $output, 'ck' => time(), 'client' => $this -> client, )); } public function get_subscription_list( $output = 'json' ){ return $this -> request2google('subscription/list', "get", false, array( 'output' => $output, 'ck' => time(), 'client' => $this -> client, )); } public function get_preference_list( $output = 'json' ){ return $this -> request2google('preference/list', "get", false, array( 'output' => $output, 'ck' => time(), 'client' => $this -> client, )); } public function get_unread_count( $output = 'json' ){ return $this -> request2google('unread-count', "get", false, array( 'all' => true, 'output' => $output, 'ck' => time(), 'client' => $this -> client, )); } public function get_user_info( $output = 'json' ){ return $this -> request2google('user-info', "get", false, array( 'output' => $output, 'ck' => time(), 'client' => $this -> client, )); } private function get_token(){ $this -> token = $this -> request2google('token'); } //get contents functions /* r - order r = n - new items r = o - old items r = a - auto sort */ private function get_content( $content_url = '', $number = 20, $order = 'n', $exclude_target = '', $start_time = '', $continuation = ''){ $fields = array( 'ck' => time(), 'client' => $this -> client, 'n' => $number, 'r' => $order, 'output' => 'json', ); if ( !empty($exclude_target) ){$fields['xt'] = $exclude_target;} if ( !empty($start_time) ){$fields['ot'] = $start_time;} if ( !empty($continuation) ){$fields['c'] = $continuation;} return $this -> request2google('stream/contents/'.Utils::urlencode( $content_url ), 'get', false, $fields); } public function get_content_feed( $feed_url = '', $number = 20, $order = 'n', $exclude_target = '', $start_time = '', $continuation = ''){ return $this -> get_content( $feed_url, $number, $order, $exclude_target, $start_time, $continuation ); } public function get_content_by_label( $label = '', $number = 20, $order = 'n', $exclude_target = '', $start_time = '', $continuation = ''){ return $this -> get_content( (strpos($label, '/') === false?'user/-/label/':'').$label, $number, $order, $exclude_target, $start_time, $continuation ); } public function get_content_by_state( $state = '', $number = 20, $order = 'n', $exclude_target = '', $start_time = '', $continuation = ''){ return $this -> get_content( (strpos($state, '/') === false?'user/-/state/com.google/':'').$state, $number, $order, $exclude_target, $start_time, $continuation ); } public function get_unread( $number = 20, $order = 'n' ){ return $this ->get_content_by_state('reading-list', $number, $order, 'user/-/state/com.google/read'); } public function get_starred($number = 20, $order = 'n'){ return $this ->get_content_by_state('starred', $number, $order); } /* Edit functions */ private function edit_do( $api_function , $post_fields ){ $post_fields['T'] = $this -> token; if ( $this -> request2google( $api_function, "post", false, $post_fields ) == "OK"){ return true; } else { return false; } } /* public function edit_subscription( s return $this -> edit_do( 'subscription/edit', } */ public function set_state( $itemId, $state = 'read'){ $post_fields = array( "i" => $itemId, "a" => 'user/-/state/com.google/'.$state, ); //print_r( $post_fields ); return $this ->edit_do('edit-tag?client='.$this -> client, $post_fields); } private function clientLogin( $email, $password ){ $response = $this -> request( $this -> clientlogin_url, 'post', false, array( "accountType" => $this -> account_type, "Email" => $email, "Passwd" => $password, "service" => $this -> service, "source" => $this -> source, )); if ( $response['code'] == 200) { preg_match("/Auth=([a-z0-9_\-]+)/i", $response['body'], $matches_auth); if ($matches_auth[1]){ $this -> auth = $matches_auth[1]; $_SESSION[ $this -> session_var_auth_name ] = $this -> auth; return true; } else { Throw new AutentificationException('Auth error: not finded Auth token in response'); } } else { Throw new AutentificationException('Auth error: server response '.$response['code'] ); } } } //Exceptions class AutentificationException extends Exception {}