只从谷歌联系人API获取新的联系人

时间:2016-09-29 15:41:27

标签: java google-api

我想向Google联系人查询,该联系人会检索自给定日期以来的所有新联系人。

我正在使用具有以下范围的google contacts api:<?php ob_start(); // This if statement checks to determine whether the registration form has been submitted // If it has, then the registration code is run, otherwise the form is displayed if(!empty($_POST)) { // check length of $_POST['username'] if (strlen($_POST['username']) <3){ die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> The username is too short (requier atleast 3 characters). </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // check length of $_POST['password'] if (strlen($_POST['password']) <5){ die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> Your password is too short (requier atleast 5 characters)! </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // Ensure that the user has entered a non-empty username if(empty($_POST['username'])) { // Note that die() is generally a terrible way of handling user errors // like this. It is much better to display the error with the form // and allow the user to correct their mistake. However, that is an // exercise for you to implement yourself. ; die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> Please enter a username. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // Ensure that the user has entered a non-empty password if(empty($_POST['password'])) { die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> Password cant be empty. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // Make sure the user entered a valid E-Mail address // filter_var is a useful PHP function for validating form input, see: // http://us.php.net/manual/en/function.filter-var.php // http://us.php.net/manual/en/filter.filters.php if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> Please enter a valid E-mail address. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // We will use this SQL query to see whether the username entered by the // user is already in use. A SELECT query is used to retrieve data from the database. // :username is a special token, we will substitute a real value in its place when // we execute the query. $query = " SELECT 1 FROM users WHERE username = :username "; // This contains the definitions for any special tokens that we place in // our SQL query. In this case, we are defining a value for the token // :username. It is possible to insert $_POST['username'] directly into // your $query string; however doing so is very insecure and opens your // code up to SQL injection exploits. Using tokens prevents this. // For more information on SQL injections, see Wikipedia: // http://en.wikipedia.org/wiki/SQL_Injection $query_params = array( ':username' => $_POST['username'] ); try { // These two statements run the query against your database table. $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException $ex) { // Note: On a production website, you should not output $ex->getMessage(). // It may provide an attacker with helpful information about your code. die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> We where not able to process your information. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> ' . $ex->getMessage()); } // The fetch() method returns an array representing the "next" row from // the selected results, or false if there are no more rows to fetch. $row = $stmt->fetch(); // If a row was returned, then we know a matching username was found in // the database already and we should not allow the user to continue. if($row) { die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> Username is already taken </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // Now we perform the same type of check for the email address, in order // to ensure that it is unique. $query = " SELECT 1 FROM users WHERE email = :email "; $query_params = array( ':email' => $_POST['email'] ); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException $ex) { die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> We where not able to process your information. Please try again. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> ' . $ex->getMessage()); } $row = $stmt->fetch(); if($row) { die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> E-mail address is already taken. </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '); } // An INSERT query is used to add new rows to a database table. // Again, we are using special tokens (technically called parameters) to // protect against SQL injection attacks. $query = " INSERT INTO users ( username, password, salt, email ) VALUES ( :username, :password, :salt, :email ) "; // A salt is randomly generated here to protect again brute force attacks // and rainbow table attacks. The following statement generates a hex // representation of an 8 byte salt. Representing this in hex provides // no additional security, but makes it easier for humans to read. // For more information: // http://en.wikipedia.org/wiki/Salt_%28cryptography%29 // http://en.wikipedia.org/wiki/Brute-force_attack // http://en.wikipedia.org/wiki/Rainbow_table $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); // This hashes the password with the salt so that it can be stored securely // in your database. The output of this next statement is a 64 byte hex // string representing the 32 byte sha256 hash of the password. The original // password cannot be recovered from the hash. For more information: // http://en.wikipedia.org/wiki/Cryptographic_hash_function $password = hash('sha256', $_POST['password'] . $salt); // Next we hash the hash value 65536 more times. The purpose of this is to // protect against brute force attacks. Now an attacker must compute the hash 65537 // times for each guess they make against a password, whereas if the password // were hashed only once the attacker would have been able to make 65537 different // guesses in the same amount of time instead of only one. for($round = 0; $round < 65536; $round++) { $password = hash('sha256', $password . $salt); } // Here we prepare our tokens for insertion into the SQL query. We do not // store the original password; only the hashed version of it. We do store // the salt (in its plaintext form; this is not a security risk). $query_params = array( ':username' => $_POST['username'], ':password' => $password, ':salt' => $salt, ':email' => $_POST['email'] ); try { // Execute the query to create the user $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException $ex) { // Note: On a production website, you should not output $ex->getMessage(). // It may provide an attacker with helpful information about your code. die(' <div class="container"> <div class="flag note note--error"> <div class="flag__image note__icon"> <i class="fa fa-times"></i> </div> <div class="flag__body note__text"> Something went wrong!<br /> We where not able to process your information. Please try again </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> ' . $ex->getMessage()); } ob_clean(); // This redirects the user back to the login page after they register echo' <div class="container"> <div class="flag note note--info"> <div class="flag__image note__icon"> <i class="fa fa-info"></i> </div> <div class="flag__body note__text"> <p>Successfull!<br /> We have sent you an E-mail With a verification link. Please use the link to verify your account, and complete your registration.</p> </div> <a href="#" class="note__close"> <i class="fa fa-times"></i> </a> </div> </div> '; // Calling die or exit after performing a redirect using the header function // is critical. The rest of your PHP script will continue to execute and // will be sent to the user if you do not die or exit. die(); } //session to store input after die() function ?>

当我尝试创建包含publishedMin参数的查询时:

https://www.google.com/m8/feeds/

我收到以下错误:

URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
Query myQuery = new Query(feedUrl);
myQuery.setPublishedMin(startDateTime);

myQuery.setMaxResults(1000);

ContactFeed resultFeed = service.getFeed(myQuery, ContactFeed.class);

如果我不能使用com.google.gdata.util.ServiceForbiddenException: Forbidden This service does not support the &#39;published-min&#39; parameter. at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:605) at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564) at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560) at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538) at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536) at com.google.gdata.client.Service.getFeed(Service.java:1135) at com.google.gdata.client.Service.getFeed(Service.java:1077) ,如何在给定日期之后获得新联系人。 有替代方法或解决方法吗?

我尝试使用updatedMin然后搜索publishedMin的每个联系人以过滤掉它们,但所有值都是getPublished()

提前致谢。

1 个答案:

答案 0 :(得分:0)

Google Contacts API不支持&#34; published-min&#34;参数。出于好奇,你在哪里找到了仍在尝试使用它的Java库? (如果它是Google提供的库的最新版本,那么它应该更新)

与此同时,您要查找的是updated-min参数: https://developers.google.com/google-apps/contacts/v3/#retrieving_contacts_using_query_parameters