private async IAsyncEnumerable <string> GetMediaItemIdsAsync(string albumId) { var request = new Dictionary <string, object> { { "albumId", albumId }, { "pageSize", 100 }, }; while (true) { var content = new StringContent( JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json" ); var url = "https://photoslibrary.googleapis.com/v1/mediaItems:search"; var response = await googleHttpClient.PostAsync(url, content); response.EnsureSuccessStatusCode(); var json = JObject.Parse(await response.Content.ReadAsStringAsync()); var mediaItemIds = json .Value <JArray>("mediaItems") ?.Select(o => o.Value <string>("id")) ?? new string[0]; foreach (var id in mediaItemIds) { yield return(id); } var nextPageToken = json.Value <string>("nextPageToken"); if (string.IsNullOrEmpty(nextPageToken)) { break; } request["pageToken"] = nextPageToken; } }
public async Task <Album> CreateAlbumAsync() { const string title = "Ambient Fuckery"; var request = new { album = new { title } }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); var response = await googleHttpClient.PostAsync( "https://photoslibrary.googleapis.com/v1/albums", content ); response.EnsureSuccessStatusCode(); var id = JsonConvert.DeserializeObject <JObject>(await response.Content.ReadAsStringAsync()) .Value <string>("id"); return(new Album { Id = id, Name = title, }); }