2014-09-27 75 views
3

我正在使用谷歌聯繫人api(gdata)在谷歌聯繫人中設置聯繫人的照片。
我使用的是提琴手,我發現請求是根據Google Contacts Examples發送的,但從谷歌下載的照片總是96x96。
我使用的更新和下載照片中的代碼是:谷歌聯繫人api(gdata)同步低分辨率照片

public void UpdateUserPhoto(Contact contact, Stream photo) 
{ 
     _contactsRequest.SetPhoto(contact, photo); 
} 

public static void DownloadPhoto(ContactsRequest cr, Contact contact) 
{ 
    if (contact.PhotoEtag == null) 
     return; 
    Stream photoStream = cr.Service.Query(contact.PhotoUri); 
    FileStream outStream = File.OpenWrite(string.Format(@"c:\friends\{0}.jpg",contact.Name.FullName)); 
    byte[] buffer; 
    using (var memoryStream = new MemoryStream()) 
    { 
     photoStream.CopyTo(memoryStream); 
     buffer = memoryStream.ToArray(); 
    } 

    outStream.Write(buffer, 0, buffer.Length); 
    photoStream.Close(); 
    outStream.Close(); 
} 

我試過的聯繫人同步到我的手機有過,規模總是限制在96×96。 我做錯了什麼或谷歌不允許同步超過96x96?我可以看到許多應用程序可以同步超過96x96的聯繫人,然後我猜這有可能,但是正確的方法是什麼?

編輯

這裏是照片的同步&檢索由提琴手所捕獲:
同步照片請求:
PUT https://www.google.com/m8/feeds/photos/media/[email protected]/55f3484e8aaf1c82 HTTP/1.1
的Etag: 「SomeEtag」
如果 - 匹配:「SomeEtag」。
內容類型:image/JPG
的User-Agent:G-GoogleContactsSync/GOAuth2RequestFactory-CS-版本= 2.2.0.0
授權:承載myAuthorization
的GData-版本:3.0
主機:www.google.com
內容長度:34480

同步光響應
HTTP/1.1 200 OK
內容類型:應用/原子+ xml的;字符集= UTF-8; type = entry
GData-Version:3.1
ETag:「KgxxHGIyfCt7I2BoA047FShUNFU3BWx8RDQ」。
日期:星期三,2014年10月1日20點13分06秒GMT
到期日:週三,2014年10月1日20點13分06秒GMT
緩存控制:私人,最大年齡= 0
X-Content-Type的-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=塊
服務器:GSE
複用協議:443:QUIC,p值= 0.01
的Content-Length:694
(下面是XML ID爲,更新,編輯等)

照片請求:
GET https://www.google.com/m8/feeds/photos/media/[email protected]/55f3484e8aaf1c82 HTTP/1.1
Content-Type:application/atom + xml;字符集= UTF-8
的User-Agent:G-GoogleContactsSync/GOAuth2RequestFactory-CS-版本= 2.2.0.0
授權:承載myAuthorization
的GData-版本:3.0
主機:www.google.com

圖片回覆:
HTTP/1。1 200 OK
內容類型:圖像/ JPEG
到期日:週三,2014年10月1日20點25分54秒GMT
日期:星期三,2014年10月1日20點25分54秒GMT
緩存控制:私人, max-age = 0,must-revalidate,no-transform
Vary:Accept,X-GData-Authorization,GData-Version
GData-Version:3.1
ETag:「SomeEtag」。
傳輸編碼:分塊
X-Content-Type的選項:nosniff
X框選項:SAMEORIGIN
X-XSS-保護:1;模式=塊
服務器:GSE
複用協議:443:QUIC,P = 0.01

+0

您向哪個版本的API發出請求?如果您在請求中省略版本參數,則默認爲v1,這會返回96x96的照片。 – 2014-09-30 23:02:00

+0

它的版本3.請參閱我的更新.. – atlanteh 2014-10-01 20:33:26

+0

已修改我的答案 – 2014-10-05 17:01:20

回答

3

我這個重新測試自己,並上載從多種來源的照片,包括Android手機和平板電腦上的聯繫人應用,Gmail的聯繫人和API。他們都將採取更高分辨率的圖片,但只允許使用聯繫API v3的大小爲96x96。所以當您通過任何應用程序使用該API在PC上下載時,您將獲得一張96x96圖像,似乎沒有辦法以改變那個特定的API。

意義除非我也錯過了聯繫API v3僅限於此大小的圖像。我懷疑谷歌+等值不是。

中,我已經做了這個問題的方法是使用谷歌加API

var service = new PlusService(new BaseClientService.Initializer()); 
    var request = new PeopleResource.GetRequest(service, "<your google user id>") 
    { 
     OauthToken = authParameters.AccessToken 
    }; 

    Person person = request.Execute(); 
    Person.ImageData image = person.Image; 
    string pictureUrl = image.Url; 

    ... request to url here after munging sz 
現在

你將需要更改回來要作爲默認大小是網址?SZ = 50,如果您的原稿尺寸符合您指定的尺寸,則會顯示該尺寸,否則會縮放圖像。

然而,聯繫人API和谷歌加API是不同的野獸。您需要使用Google plus的域名功能才能將您的聯繫人拉出,並且可能他們擁有的照片與您在聯繫人列表中設置的照片不同(如果有的話)。

Krystan

+0

它已經是第3版。請參閱我的更新.. – atlanteh 2014-10-01 20:32:45

+1

好的。謝謝。那麼是否還有其他任何可以使用PC的API來使用它? – atlanteh 2014-10-04 17:20:48

+0

如果您從Url中刪除'?sz = 50',您將獲得原始大小。請參閱https://developers.google.com/+/web/api/rest/latest/people#image.url(雖然它沒有明確表示) – TWiStErRob 2016-01-19 23:44:12