2014-09-27 8 views
3

Google 연락처에서 사진을 설정하려면 Google Contacts API (gdata)를 사용하고 있습니다.
피들러를 사용 중이며 요청이 Google Contacts Examples에 따라 전송되었지만 Google에서 다시 다운로드 한 사진은 항상 96x96입니다.
내가 업데이트하고 사진을 다운로드하기 위해 사용하고있는 코드는 다음과 같습니다Google 주소록 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(); 
} 

내 휴대폰에 연락처를 동기화 시도가 너무 크기가 항상 최대 96x96로 제한되었다. 내가 뭔가 잘못하고있는 중이거나 Google에서 96x96 이상 동기화를 허용하지 않습니까? 가능하다면 96x96 이상으로 연락처를 동기화하는 많은 응용 프로그램을 볼 수 있지만 올바른 방법은 무엇입니까?

편집 여기

피들러에 의해 포착 사진의 동기 & 검색은 다음과 같습니다
동기화 사진 요청 :
PUT https://www.google.com/m8/feeds/photos/media/[email protected]/55f3484e8aaf1c82 HTTP/1.1
Etag입니다 : "SomeEtag"
하는 경우 - 일치 : "SomeEtag."
콘텐츠 형식 : 이미지/JPG
사용자 에이전트 : G-GoogleContactsSync/GOAuth2RequestFactory-CS-버전 = 2.2.0.0
인증 : 무기명 myAuthorization
의 GData-버전 : 3.0
호스트 : www.google.com
콘텐츠 길이 : 34,480

동기화 사진 응답
HTTP/1.1 200 OK
콘텐츠 형식 : 응용 프로그램/원자 + XML; charset = UTF-8; type = entry
GData- 버전 : 3.1
ETag : "KgxxHGIyfCt7I2BoA047FShUNFU3BWx8RDQ."
날짜 : 2014년 10월 1일 (수) 그리니치 표준시 20시 13분 6초
이 만료 : 수요일, 2014년 10월 1일 그리니치 표준시 20시 13분 6초
캐시 제어 : = 0
X-Content-Type을 개인, 최대 사용 기간 -Options : nosniff
X 프레임 옵션 : SAMEORIGIN
X-XSS- 보호 : 1; 모드 = 블록
서버 : GSE
대체 프로토콜 : 443 : QUIC, P = 0.01
콘텐츠 길이 : 694
(여기에 아이디와 XML 등 편집, 업데이트가 온다)

사진 요청 :
GET https://www.google.com/m8/feeds/photos/media/[email protected]/55f3484e8aaf1c82 HTTP/1.1
콘텐츠 유형 : application/atom + xml; 문자셋 = UTF-8
사용자 에이전트 : G-GoogleContactsSync/GOAuth2RequestFactory-CS-버전 = 2.2.0.0
인증 : 무기명 myAuthorization
의 GData-버전 : 3.0
호스트 : www.google.com

사진 응답 :
HTTP/1.OK 1 200
콘텐츠 형식 : 이미지/JPEG
만료 : 2014년 (수) 그리니치 표준시 20시 25분 54초
날짜 10월 1일 : 2014년 10월 1일 (수) 그리니치 표준시 20시 25분 54초
캐시 제어 : 개인, GData-Version : 3.1
Vary : X-GData-Authorization, GData- 버전
GData 버전 : 3.1
ETag : "SomeEtag".
전송 - 인코딩 :
X-프레임 - 옵션 NOSNIFF :
X-Content-Type을-옵션을 청크 SAMEORIGIN
X-XSS-보호 : 1; 모드 = 블록
서버 : GSE
대체 프로토콜 : 443 : QUIC, P =

+0

어떤 버전의 API를 요청하고 있습니까? 요청에서 version 매개 변수를 생략하면 기본적으로 v1로 설정되어 96x96 사진을 반환합니다. –

+0

그것은 버전 3입니다. 내 업데이트를 참조하십시오 .. – atlanteh

+0

내 대답을 수정했습니다 –

답변

3

0.01 나는이에게 자신을 다시 테스트 내 안드로이드 전화와 태블릿에 연락처 응용 프로그램을 포함하여 출처에서 사진을 업로드, Gmail은 연락처 및 API. 모두가 더 높은 해상도의 사진을 찍지 만 Contact API v3을 사용하여 96x96 크기 만 허용합니다. PC에서 해당 API를 사용하는 응용 프로그램을 통해 다운로드 할 때 96x96 이미지를 얻을 수는 없습니다. 특정 API를 사용하여이를 변경하십시오.

연락처 API v3이이 크기의 이미지로 제한된다는 것을 놓친 경우가 아니면 의미가 있습니다. 나는 google + 동등 물이 아닌지 의심 스럽다.

내가 이런 짓을했는지하는 방법은 다시 당신이 기본값으로 원하는 크기로 제공되는 URL을 변경해야하는거야 지금

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 

구글 플러스 API를 사용할 수 있나요? SZ = 50, 원본 크기가 지정한 크기이면 표시하거나 그렇지 않으면 이미지 크기를 조정합니다.

그러나 연락처 api와 google plus api는 다른 동물입니다. Google 플러스의 도메인 기능을 사용하여 연락처를 가져오고 잠재적으로 연락처 목록과 다른 사진을 가질 수 있습니다 (설정되어있는 경우).

크리스탄

+0

그것은 이미 버전 3입니다. 내 업데이트 .. – atlanteh

+1

. 고마워. 그래서 PC에서 사용할 수있는 다른 API가 있습니까? – atlanteh

+0

URL에서'? sz = 50'을 삭제하면 원래 크기가됩니다. https://developers.google.com/+/web/api/rest/latest/people#image.url을 참조하십시오 (명시 적으로는 여기에 나와 있지는 않지만). – TWiStErRob