Все, что мне нужно – это создать оповещение Google, подключенное к моей учетной записи, которое должно быть доставлено в мой канал. Для auth я использую curl
function googleAuthenticate($username, $password, $source, $service = 'alerts') { $session_token = $source . '_' . $service . '_auth_token'; if (isset($_SESSION[$session_token])) { echo 'уже есть'; return $_SESSION[$session_token]; } // get an authorization token $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin"); $post_fields = "accountType=" . urlencode('HOSTED_OR_GOOGLE') . "&Email=" . urlencode($username) . "&Passwd=" . urlencode($password) . "&source=" . urlencode($source) . "&service=" . urlencode($service); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_HEADER, true); $response = curl_exec($ch); curl_close($ch); if (strpos($response, '200 OK') === false) { return false; } // find the auth code preg_match("/(Auth=)([\w|-]+)/", $response, $matches); if (!$matches[2]) { return false; } $_SESSION[$session_token] = $matches[2]; return $matches[2];}
но я не смог заполнить форму на google.com/alerts
На основе кода на этой странице:
Войдите в Google с помощью PHP и Curl, Cookie отключился?
function createAlert($search) { $USERNAME = 'EMAIL_ADDRESS'; $PASSWORD = 'PASSWORD'; $COOKIEFILE = 'cookies.txt'; $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE); curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/ServiceLogin?hl=en&service=alerts&continue=http://www.google.com/alerts/manage'); $data = curl_exec($ch); $formFields = $this->getFormFields($data); $formFields['Email'] = $USERNAME; $formFields['Passwd'] = $PASSWORD; unset($formFields['PersistentCookie']); $post_string = ''; foreach($formFields as $key => $value) { $post_string .= $key . '=' . urlencode($value) . '&'; } $post_string = substr($post_string, 0, -1); curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/ServiceLoginAuth'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); $result = curl_exec($ch); if (strpos($result, '<title>Redirecting') === false) { var_dump($result); die("Login failed"); } else { curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts'); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, null); $result = curl_exec($ch); // Create alert preg_match('/<input type="hidden" name="x" value="([^"]+)"/', $result, $matches); $post = array( "x" => $matches[1], // anti-XSRF key "q" => $search, // Search term "t" => 7, // Result type (everything) "f" => 1, // Frequency (once a day) "l" => 1, // How many (all results) "e" => "feed" // Type of delivery (RSS) ); $post_string = ''; foreach($post as $key => $value) { $post_string .= $key . '=' . urlencode($value) . '&'; } $post_string = substr($post_string, 0, -1); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts/create'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); $result = curl_exec($ch); $matches = array(); preg_match('#<a href="(http://www.google.com/alerts/feeds/[\d/]+)"#', $result, $matches); $top_alert = $matches[1]; return $top_alert; } } function getFormFields($data) { if (preg_match('/(<form.*?id=.?gaia_loginform.*?<\/form>)/is', $data, $matches)) { $inputs = $this->getInputs($matches[1]); return $inputs; } else { die("didn't find login form"); } } function getInputs($form) { $inputs = array(); $elements = preg_match_all('/(<input[^>]+>)/is', $form, $matches); if ($elements > 0) { for($i = 0; $i < $elements; $i++) { $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]); if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) { $name = $name[1]; $value = ''; if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) { $value = $value[1]; } $inputs[$name] = $value; } } } return $inputs; }
неfunction createAlert($search) { $USERNAME = 'EMAIL_ADDRESS'; $PASSWORD = 'PASSWORD'; $COOKIEFILE = 'cookies.txt'; $ch = curl_init(); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE); curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/ServiceLogin?hl=en&service=alerts&continue=http://www.google.com/alerts/manage'); $data = curl_exec($ch); $formFields = $this->getFormFields($data); $formFields['Email'] = $USERNAME; $formFields['Passwd'] = $PASSWORD; unset($formFields['PersistentCookie']); $post_string = ''; foreach($formFields as $key => $value) { $post_string .= $key . '=' . urlencode($value) . '&'; } $post_string = substr($post_string, 0, -1); curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/ServiceLoginAuth'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); $result = curl_exec($ch); if (strpos($result, '<title>Redirecting') === false) { var_dump($result); die("Login failed"); } else { curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts'); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, null); $result = curl_exec($ch); // Create alert preg_match('/<input type="hidden" name="x" value="([^"]+)"/', $result, $matches); $post = array( "x" => $matches[1], // anti-XSRF key "q" => $search, // Search term "t" => 7, // Result type (everything) "f" => 1, // Frequency (once a day) "l" => 1, // How many (all results) "e" => "feed" // Type of delivery (RSS) ); $post_string = ''; foreach($post as $key => $value) { $post_string .= $key . '=' . urlencode($value) . '&'; } $post_string = substr($post_string, 0, -1); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/alerts/create'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); $result = curl_exec($ch); $matches = array(); preg_match('#<a href="(http://www.google.com/alerts/feeds/[\d/]+)"#', $result, $matches); $top_alert = $matches[1]; return $top_alert; } } function getFormFields($data) { if (preg_match('/(<form.*?id=.?gaia_loginform.*?<\/form>)/is', $data, $matches)) { $inputs = $this->getInputs($matches[1]); return $inputs; } else { die("didn't find login form"); } } function getInputs($form) { $inputs = array(); $elements = preg_match_all('/(<input[^>]+>)/is', $form, $matches); if ($elements > 0) { for($i = 0; $i < $elements; $i++) { $el = preg_replace('/\s{2,}/', ' ', $matches[1][$i]); if (preg_match('/name=(?:["\'])?([^"\'\s]*)/i', $el, $name)) { $name = $name[1]; $value = ''; if (preg_match('/value=(?:["\'])?([^"\'\s]*)/i', $el, $value)) { $value = $value[1]; } $inputs[$name] = $value; } } } return $inputs; }
Вы можете использовать эту библиотеку: http://coders11.com/googlealertsapi/
Недавно он стал коммерческим, но он работает очень хорошо:
Последнее обновление: 11/02/2014 Мы больше не делимся этим классом. Вы можете купить полный исходный код с коммерческой лицензией без ограничений за € 59 / $ 83