3

我正在尝试学习 google Person api 来开发应用程序。

我正在使用谷歌 api 教程 https://developers.google.com/people/v1/getting-started

    using Google;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.People.v1;
    using Google.Apis.People.v1.Data;
    using Google.Apis.Services;

    ...

            static void Main(string[] args)
             {
                // Create OAuth credential.
                UserCredential credential = 
    GoogleWebAuthorizationBroker.AuthorizeAsync(
                    new ClientSecrets
                    {
                        ClientId = "CLIENT_ID",
                        ClientSecret = "CLIENT_SECRET"
                    },
                    new[] { "profile", 
    "https://www.googleapis.com/auth/contacts.readonly" },
                     "me",
                    CancellationToken.None).Result;

            // Create the service.
            var peopleService = new PeopleService (new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "APP_NAME",
            });

PeopleResource.ConnectionsResource.ListRequest peopleRequest =
    peopleService.People.Connections.List("people/me");
peopleRequest.PersonFields = "names,emailAddresses";
ListConnectionsResponse connectionsResponse = peopleRequest.Execute();
IList<Person> connections = connectionsResponse.Connections;

当我在教程中使用示例脚本时,信息被检索到了。

我使用 c# 在 Visual Studio 中创建了一个灵魂。我添加了对所有需要的 google api 的引用。

该项目无法编译,因为 PersonFields 无法识别。成功的动作需要此属性

4

3 回答 3

2

所以,我遇到了同样的问题,经过数小时摧毁我的大脑试图解决它,我找到了接近解决方案的东西。

peopleRequest.RequestMaskIncludeField

具有这样的值:

peopleRequest.RequestMaskIncludeField = "person.names";

(“names”单独不起作用,“person.names”起作用)

有了这个,我设法没有编译错误和答案,唯一让我很痛苦的是,根据文档,这已被弃用......

希望谷歌能尽快更新 API,这对你有帮助!!

于 2017-09-15T14:09:14.447 回答
1

我遇到了同样的问题。经过数小时的玩耍后,我发现不要使用People.v1命名空间(就像您在代码示例中所做的那样),而是使用PeopleService.v1命名空间。这不是谷歌文档明确所说的(它根本没有说太多),目前我还不太清楚这些不同命名空间背后的原因是什么。很想找到一些澄清...

于 2017-11-22T19:38:30.013 回答
1

这是我发现和工作的。

        peopleRequest.RequestMaskIncludeField = new List<string>() {
            "person.phoneNumbers" ,
            "person.EmailAddresses",
            "person.names"
        };

        ListConnectionsResponse people = peopleRequest.Execute();

        if (people != null && people.Connections != null && people.Connections.Count > 0)
        {
            foreach (var person in people.Connections)
            {
                Console.Write(person.Names != null ? (person.Names[0].DisplayName + "  " ?? "n/a") : "n/a  ");
                Console.Write(person.EmailAddresses?.FirstOrDefault()?.Value + "  ");
                Console.WriteLine(person.PhoneNumbers?.FirstOrDefault()?.Value);
            }

            if (people.NextPageToken != null)
            {
                GetPeople(service, people.NextPageToken);
            }
于 2018-01-05T08:24:18.987 回答