private NameValueCollection GetAuthHeaders() { NameValueCollection headers = GoogleAuth.GetAuthHeaders(); headers.Add("GData-Version", "3"); return(headers); }
public override UploadResult Upload(Stream stream, string fileName) { if (!CheckAuthorization()) { return(null); } UploadResult result = new UploadResult(); if (IsPublic) { AlbumID = CreateAlbum(fileName).id; GooglePhotosAlbumOptions albumOptions = new GooglePhotosAlbumOptions(); string serializedAlbumOptions = JsonConvert.SerializeObject(albumOptions); string serializedAlbumOptionsResponse = SendRequest(HttpMethod.POST, $"https://photoslibrary.googleapis.com/v1/albums/{AlbumID}:share", content: serializedAlbumOptions, headers: GoogleAuth.GetAuthHeaders(), contentType: UploadHelpers.ContentTypeJSON); GooglePhotosAlbumOptionsResponse albumOptionsResponse = JsonConvert.DeserializeObject <GooglePhotosAlbumOptionsResponse>(serializedAlbumOptionsResponse); result.URL = albumOptionsResponse.shareInfo.shareableUrl; } NameValueCollection uploadTokenHeaders = new NameValueCollection { { "X-Goog-Upload-File-Name", fileName }, { "X-Goog-Upload-Protocol", "raw" }, { "Authorization", GoogleAuth.GetAuthHeaders()["Authorization"] } }; string uploadToken = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/uploads", stream, contentType: UploadHelpers.ContentTypeOctetStream, headers: uploadTokenHeaders); GooglePhotosNewMediaItemRequest newMediaItemRequest = new GooglePhotosNewMediaItemRequest { albumId = AlbumID, newMediaItems = new GooglePhotosNewMediaItem[] { new GooglePhotosNewMediaItem { simpleMediaItem = new GooglePhotosSimpleMediaItem { uploadToken = uploadToken } } } }; string serializedNewMediaItemRequest = JsonConvert.SerializeObject(newMediaItemRequest); result.Response = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate", serializedNewMediaItemRequest, headers: GoogleAuth.GetAuthHeaders(), contentType: UploadHelpers.ContentTypeJSON); GooglePhotosNewMediaItemResults newMediaItemResult = JsonConvert.DeserializeObject <GooglePhotosNewMediaItemResults>(result.Response); if (!IsPublic) { result.URL = newMediaItemResult.newMediaItemResults[0].mediaItem.productUrl; } return(result); }
public override UploadResult Upload(Stream stream, string fileName) { if (!CheckAuthorization()) { return(null); } string metadata = GetMetadata(fileName, FolderID, DriveID); UploadResult result = SendRequestFile("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,webViewLink,webContentLink&supportsAllDrives=true", stream, fileName, "file", headers: GoogleAuth.GetAuthHeaders(), contentType: "multipart/related", relatedData: metadata); if (!string.IsNullOrEmpty(result.Response)) { GoogleDriveFile upload = JsonConvert.DeserializeObject <GoogleDriveFile>(result.Response); if (upload != null) { AllowReportProgress = false; if (IsPublic) { SetPermissions(upload.id, GoogleDrivePermissionRole.reader, GoogleDrivePermissionType.anyone, false); } if (DirectLink) { Uri webContentLink = new Uri(upload.webContentLink); string leftPart = webContentLink.GetLeftPart(UriPartial.Path); NameValueCollection queryString = HttpUtility.ParseQueryString(webContentLink.Query); queryString.Remove("export"); result.URL = $"{leftPart}?{queryString}"; } else { result.URL = upload.webViewLink; } } } return(result); }
public override UploadResult Upload(Stream stream, string fileName) { if (!CheckAuthorization()) { return(null); } if (!Helpers.IsVideoFile(fileName)) { Errors.Add("YouTube only supports video files"); return(null); } string metadata = GetMetadata(fileName); UploadResult result = SendRequestFile("https://www.googleapis.com/upload/youtube/v3/videos?part=id,snippet,status", stream, fileName, headers: GoogleAuth.GetAuthHeaders(), metadata: metadata); if (!string.IsNullOrEmpty(result.Response)) { YouTubeVideo upload = JsonConvert.DeserializeObject <YouTubeVideo>(result.Response); if (upload != null) { AllowReportProgress = false; result.URL = "https://youtu.be/" + upload.id; switch (upload.status.uploadStatus) { case YouTubeVideoStatus.UploadFailed: Errors.Add("Upload failed: " + upload.status.failureReason); break; case YouTubeVideoStatus.UploadRejected: Errors.Add("Upload rejected: " + upload.status.rejectionReason); break; } } } return(result); }
public List <GoogleDriveSharedDrive> GetDrives() { if (!CheckAuthorization()) { return(null); } Dictionary <string, string> args = new Dictionary <string, string>(); List <GoogleDriveSharedDrive> drives = new List <GoogleDriveSharedDrive>(); string pageToken = ""; // Make sure we get all the pages of results do { args["pageToken"] = pageToken; string response = SendRequest(HttpMethod.GET, "https://www.googleapis.com/drive/v3/drives", args, GoogleAuth.GetAuthHeaders()); pageToken = ""; if (!string.IsNullOrEmpty(response)) { GoogleDriveSharedDriveList driveList = JsonConvert.DeserializeObject <GoogleDriveSharedDriveList>(response); if (driveList != null) { drives.AddRange(driveList.drives); pageToken = driveList.nextPageToken; } } }while (!string.IsNullOrEmpty(pageToken)); return(drives); }
public List <GoogleDriveFile> GetFolders(string driveID = "", bool trashed = false, bool writer = true) { if (!CheckAuthorization()) { return(null); } string query = "mimeType = 'application/vnd.google-apps.folder'"; if (!trashed) { query += " and trashed = false"; } if (writer && string.IsNullOrEmpty(driveID)) { query += " and 'me' in writers"; } Dictionary <string, string> args = new Dictionary <string, string>(); args.Add("q", query); args.Add("fields", "nextPageToken,files(id,name,description)"); if (!string.IsNullOrEmpty(driveID)) { args.Add("driveId", driveID); args.Add("corpora", "drive"); args.Add("supportsAllDrives", "true"); args.Add("includeItemsFromAllDrives", "true"); } List <GoogleDriveFile> folders = new List <GoogleDriveFile>(); string pageToken = ""; // Make sure we get all the pages of results do { args["pageToken"] = pageToken; string response = SendRequest(HttpMethod.GET, "https://www.googleapis.com/drive/v3/files", args, GoogleAuth.GetAuthHeaders()); pageToken = ""; if (!string.IsNullOrEmpty(response)) { GoogleDriveFileList fileList = JsonConvert.DeserializeObject <GoogleDriveFileList>(response); if (fileList != null) { folders.AddRange(fileList.files); pageToken = fileList.nextPageToken; } } }while (!string.IsNullOrEmpty(pageToken)); return(folders); }
private void SetPermissions(string fileID, GoogleDrivePermissionRole role, GoogleDrivePermissionType type, bool allowFileDiscovery) { if (!CheckAuthorization()) { return; } string url = string.Format("https://www.googleapis.com/drive/v3/files/{0}/permissions", fileID); string json = JsonConvert.SerializeObject(new { role = role.ToString(), type = type.ToString(), allowFileDiscovery = allowFileDiscovery.ToString() }); string response = SendRequest(HttpMethod.POST, url, json, RequestHelpers.ContentTypeJSON, null, GoogleAuth.GetAuthHeaders()); }
public List <GooglePhotosAlbumInfo> GetAlbumList() { if (!CheckAuthorization()) { return(null); } List <GooglePhotosAlbumInfo> albumList = new List <GooglePhotosAlbumInfo>(); Dictionary <string, string> albumListArgs = new Dictionary <string, string> { { "excludeNonAppCreatedData", "true" }, { "fields", "albums(id,title,shareInfo),nextPageToken" } }; string pageToken = ""; do { albumListArgs["pageToken"] = pageToken; string response = SendRequest(HttpMethod.GET, "https://photoslibrary.googleapis.com/v1/albums", albumListArgs, GoogleAuth.GetAuthHeaders()); pageToken = ""; if (!string.IsNullOrEmpty(response)) { GooglePhotosAlbums albumsResponse = JsonConvert.DeserializeObject <GooglePhotosAlbums>(response); if (albumsResponse.albums != null) { foreach (GooglePhotosAlbum album in albumsResponse.albums) { GooglePhotosAlbumInfo AlbumInfo = new GooglePhotosAlbumInfo { ID = album.id, Name = album.title }; if (album.shareInfo == null) { albumList.Add(AlbumInfo); } } } pageToken = albumsResponse.nextPageToken; } }while (!string.IsNullOrEmpty(pageToken)); return(albumList); }
public GooglePhotosAlbum CreateAlbum(string albumName) { GooglePhotosNewAlbum newItemAlbum = new GooglePhotosNewAlbum { album = new GooglePhotosAlbum { title = albumName } }; Dictionary <string, string> newItemAlbumArgs = new Dictionary <string, string> { { "fields", "id" } }; string serializedNewItemAlbum = JsonConvert.SerializeObject(newItemAlbum); string serializedNewItemAlbumResponse = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/albums", serializedNewItemAlbum, UploadHelpers.ContentTypeJSON, newItemAlbumArgs, GoogleAuth.GetAuthHeaders()); GooglePhotosAlbum newItemAlbumResponse = JsonConvert.DeserializeObject <GooglePhotosAlbum>(serializedNewItemAlbumResponse); return(newItemAlbumResponse); }