コード例 #1
0
ファイル: Program.cs プロジェクト: and3k5/GmailStats
        private static void Run(Options obj)
        {
            Console.WriteLine("Start");
            string[] scopes = { GmailService.Scope.GmailReadonly };

            Console.WriteLine("Init gmail service");
            var init = new BaseClientService.Initializer
            {
                HttpClientInitializer = CreateAuthorizeAsync(obj.ClientIdFilePath, scopes).Result
            };


            var clientService = new GmailService(init);


            Console.WriteLine("Start message fetcher and list fetcher");
            var cache = new GmailCache();

            if (obj.EraseCache)
            {
                cache.Erase();
            }
            var fetcher = new MessageDetailFetcher(clientService, cache);

            fetcher.Run();

            var listTask = Task.Run(() =>
            {
                var query             = obj.Query;
                var requestMaxResults = 1000;
                string pageToken      = null;

                var request = ListRequest(clientService, pageToken, requestMaxResults, query);
                executeRequest:
                var response = request.Execute();

                foreach (var responseMessage in response.Messages)
                {
                    fetcher.AddTodo(responseMessage);
                }

                if (response.NextPageToken != null)
                {
                    var nextPageToken = response.NextPageToken;
                    request           = ListRequest(clientService, nextPageToken, requestMaxResults, query);
                    goto executeRequest;
                }
            });


            listTask.Wait();
            Console.WriteLine("List task done");
            fetcher.Stop();

            var messages = fetcher.GetResult();

            Console.WriteLine("Fetcher done");

            var counts = new Dictionary <string, int>();

            Console.WriteLine("Result");

            foreach (var message in messages)
            {
                var    from = message.From;
                string email;
                if (from.Contains("<") && from.Contains(">"))
                {
                    var lastClose = from.LastIndexOf('>');
                    var lastOpen  = from.LastIndexOf('<');

                    email = from.Substring(lastOpen + 1, lastClose - lastOpen - 1).ToLower();
                }
                else
                {
                    email = from.ToLower();
                }

                if (obj.DomainGrouping)
                {
                    email = email.Substring(email.IndexOf("@", StringComparison.Ordinal) + 1);
                }

                if (!counts.ContainsKey(email))
                {
                    counts[email] = 0;
                }

                counts[email]++;
            }

            foreach (var pair in counts.OrderByDescending(x => x.Value).Take(30))
            {
                Console.WriteLine(pair.Key + "       =       " + pair.Value);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: and3k5/GmailStats
 public MessageDetailFetcher(IClientService clientService, GmailCache gmailCache)
 {
     this.clientService = clientService;
     _gmailCache        = gmailCache;
 }