2016-03-24 52 views
5

GoogleドライブAPIを使用してファイルを取得しようとしていますが、デフォルトではファイルは共有可能ではありません。GoogleドライブAPIを使用してファイル共有可能にする方法

<script type="text/javascript" src="https://apis.google.com/js/api.js"></script> 
<script src="https://apis.google.com/js/client.js"></script> 
     // The Browser API key obtained from the Google Developers Console. 
      // Replace with your own Browser API key, or your own key. 
      var developerKey = 'XXXXXXXXXX_ff_NX66eb-XXXXXXXXXXX'; 

      // The Client ID obtained from the Google Developers Console. Replace with your own Client ID. 
      var clientId = "XXXXXXXXXX-hs4ujaro5sc3d0g8qndtcq2tl279cfm1.apps.googleusercontent.com" 

      // Replace with your own App ID. (Its the first number in your Client ID) 
      var appId = "XXXXXXXXXX"; 
      // Scope to use to access user's Drive items. 
      var scope = ['https://www.googleapis.com/auth/drive']; 

      var pickerApiLoaded = false; 
      var oauthToken; 

        $scope.addGoogleDriveFile = function() { 
        gapi.load('auth', {'callback': onAuthApiLoad}); 
        gapi.load('picker', {'callback': onPickerApiLoad}); 
        gapi.client.setApiKey(developerKey);  
         } 

     function onAuthApiLoad() { 
         window.gapi.auth.authorize(
          { 
           'client_id': clientId, 
           'scope': scope, 
           'immediate': false 
          }, 
          handleAuthResult); 
         } 

         function onPickerApiLoad() { 
          pickerApiLoaded = true; 
          createPicker(); 
         } 

         function handleAuthResult(authResult) { 
          if (authResult && !authResult.error) { 
          oauthToken = authResult.access_token; 
          createPicker(); 
          } 
         } 

         // Create and render a Picker object for searching images. 
         function createPicker() { 
          if (pickerApiLoaded && oauthToken) { 
          var view = new google.picker.View(google.picker.ViewId.DOCS); 
          var picker = new google.picker.PickerBuilder() 
           .enableFeature(google.picker.Feature.NAV_HIDDEN) 
           .setAppId(appId) 
           .setOAuthToken(oauthToken) 
           .addView(view) 
           .addView(new google.picker.DocsUploadView()) 
           .setDeveloperKey(developerKey) 
           .setCallback(pickerCallback) 
           .build(); 
          picker.setVisible(true); 
          } 
         } 

        // A simple callback implementation. 
        function pickerCallback(data) { 
         if (data.action == google.picker.Action.PICKED) { 
          console.log(data); 
         gapi.client.load('drive', 'v2').then(function() { 
          var request = gapi.client.drive.files.get({ 
          'fileId': data.docs[0].id 
          }); 
          request.execute(function(resp) { 
          console.log(resp); 
          }); 
       }); 

         } 
        } 

私は次のような応答を取得しています: - - :ここで

は私のコードです

私は を変更したい。ここ
{ 
"kind": "drive#file", 
"id": "0B2Tb9btqdPGHeDl2NU5mYXRIaGc", 
"etag": "\"rCKCAyesbPCaBxGt0eDJcEBQNUI/MTQ1ODgxNDU0MDg2NA\"", 
"selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc", 
"webContentLink": "https://docs.google.com/uc?id=0B2Tb9btqdPGHeDl2NU5mYXRIaGc&export=download", 
"alternateLink": "https://drive.google.com/file/d/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/view?usp=drivesdk", 
"iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_12_pdf_list.png", 
"thumbnailLink": "https://lh6.googleusercontent.com/iriNEeCbpP3OfCxntpc7sK7Dok03tcBJ86X4Be_sFgLXXG1Ta8b2WOM6pF6sEpS8ytaMvA 
=s220", 
"title": "POTSS-2012.pdf", 
"mimeType": "application/pdf", 
"labels": { 
    "starred": false, 
    "hidden": false, 
    "trashed": false, 
    "restricted": false, 
    "viewed": true 
}, 
"createdDate": "2016-03-24T09:57:00.978Z", 
"modifiedDate": "2016-03-24T10:15:40.864Z", 
"modifiedByMeDate": "2016-03-24T09:57:00.978Z", 
"lastViewedByMeDate": "2016-03-24T09:57:00.978Z", 
"markedViewedByMeDate": "1970-01-01T00:00:00.000Z", 
"version": "130", 
"parents": [ 
    { 
    "kind": "drive#parentReference", 
    "id": "0AGTb9btqdPGHUk9PVA", 
    "selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/parents/0AGTb9btqdPGHUk9PVA" 
, 
    "parentLink": "https://www.googleapis.com/drive/v2/files/0AGTb9btqdPGHUk9PVA", 
    "isRoot": true 
    } 
], 
"downloadUrl": "https://doc-0o-3g-docs.googleusercontent.com/docs/securesc/79n10ihd7kdei03rpq502qv5437nv33f 
/b6p7kupn55cuqeqq8l0d9vc1orf4bkiv/1458813600000/07489391032112366212/07489391032112366212/0B2Tb9btqdPGHeDl2NU5mYXRIaGc 
?e=download&gd=true", 
"userPermission": { 
    "kind": "drive#permission", 
    "etag": "\"rCKCAyesbPCaBxGt0eDJcEBQNUI/QKpDIyepJ3z6YHq0L3ksgvrZLSo\"", 
    "id": "me", 
    "selfLink": "https://www.googleapis.com/drive/v2/files/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/permissions/me" 
, 
    "role": "owner", 
    "type": "user" 
}, 
"originalFilename": "POTSS-2012.pdf", 
"fileExtension": "pdf", 
"md5Checksum": "5b60cd94d0c0647c8828a60b8ce7efe4", 
"fileSize": "519097", 
"quotaBytesUsed": "519097", 
"ownerNames": [ 
    "xxxxx IT" 
], 
"owners": [ 
    { 
    "kind": "drive#user", 
    "displayName": "xxxx IT", 
    "isAuthenticatedUser": true, 
    "permissionId": "07489391032112366212", 
    "emailAddress": "it%xxxx [email protected]" 
    } 
], 
"lastModifyingUserName": "xxxxx IT", 
"lastModifyingUser": { 
    "kind": "drive#user", 
    "displayName": "xxxx IT", 
    "isAuthenticatedUser": true, 
    "permissionId": "07489391032112366212", 
    "emailAddress": "it%[email protected]" 
}, 
"editable": true, 
"copyable": true, 
"writersCanShare": true, 
"shared": false, 
"explicitlyTrashed": false, 
"appDataContents": false, 
"headRevisionId": "0B2Tb9btqdPGHT0pGV1FRRis0MmlJVmZsOE5uMU5UK2FNR0g0PQ", 
"spaces": [ 
    "drive" 
] 
} 

"共有":真代わりの "共有します" :false

どのように許可を変更できますか?

おかげ

あなたがドライブのAPIに Permission resourceについての詳細を読むことをお勧めします@arun

答えて

3

「共有」の場合、各ファイルのアクセス許可にはrole,type、およびemail address or domainを指定する必要があります。ファイルの所有者(ドキュメント、スプレッドシートなど)には、適切な権限を設定する必要があります。あなたがドライブV3に切り替えることができない場合は、しかし、

GET https://www.googleapis.com/drive/v3/files/{fileId}?fields=appProperties%2CfileExtension%2Ckind%2CmimeType%2Cshared&key={YOUR_API_KEY} 


{ 
"kind": "drive#file", 
"mimeType": "application/vnd.google-apps.document", 
"shared": true 
} 

:ここ

はドライブFiles.getからPermissions.create(私はDrive API v3の使用をお勧めします)

POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions?key={YOUR_API_KEY} 

{ 
"role": "reader", 
"type": "user", 
"emailAddress": "[email protected]" 
} 

レスポンスを使用して、一例であり、ドライブv2のPermission.insertを引き続き使用してジョブを実行できます。この有用で幸運を願っています!

+0

私はすでにこれを行ったが、その私のために働いていません....それは常に "共有"を返します:false。私はこのリンクをhttps://developers.google.com/drive/v3/reference/permissions/create#try-itしようとし、あなたの答えに応じて許可を与えますが、それは動作しません。 –

+0

@arunは、 "共有"をtrueに変更することによって、あなたが意味するものについてもう少し情報を提供できますか? 「共有」プロパティは*書き込み可能ではない*ため、値を変更することはできません。 1つの追加の質問、あなたはその特定のファイルの所有者ですか? – Andres

+0

"YOUR_API_KEY"の値を取得する方法は、承認のためのトークンですか? – Jacky

1

ファイルのプレビューを取得する最も簡単な方法は、代替リンクの末尾に/previewを追加することです。あなたはその後、他の人にそのリンクを共有することができますので、https://drive.google.com/file/d/0B2Tb9btqdPGHeDl2NU5mYXRIaGc/preview

同様

私がドライブAPIでapiリクエストをテストしていたときに、このhereが見つかりました。この質問の下の回答を使用して

0

は私のためにそれをやった: make folder shared google drive api v3?

私はむしろ、フォルダよりも「ファイル」にそれを適用し、型「誰」とロール '読者作られた - と同等であると思われますファイルを共有します。

1

問題は、私のGoogle開発者コンソールでGoogleドライブAPIを有効にしなかったことと、gapi.client.request()がGoogle Pickerで正常に動作するために 'クライアント'ライブラリを読み込まなかったことです。

「共有」ボタンをクリックしてGoogleドライブへのアクセス許可を許可し、ピッカーモードから複数の画像や動画を選択し、ハイパーリンクを持つ誰もが閲覧できるファイルハイパーリンクを返す実例を以下に示します'アクセス許可。

前提条件:Googleの開発者コンソールで

  • Setup your credentials
    • あなたの開発者のID、クライアントID、およびアプリケーションID
  • を取得し、開発者でPickerとドライブのAPIの両方を有効にしますコンソール

JavaScriptコード:

<script type="text/javascript"> 
 
    // The API key obtained from the Google Developers Console. 
 
    var developerKey = '#####'; 
 

 
    // The Client ID obtained from the Google Developers Console. 
 
    var clientId = "####" 
 

 
    // App ID. (Its the first number in your Client ID) 
 
    var appId = "####"; 
 

 
    // Scope to use to access user's Drive items. 
 
    var scope = ['https://www.googleapis.com/auth/drive']; 
 

 
    var pickerApiLoaded = false; 
 
    var oauthToken; 
 

 
    // Use the Google API Loader script to load the google.picker script. 
 
    function onApiLoad() { 
 
    gapi.load('auth', {'callback': onAuthApiLoad}); 
 
    gapi.load('picker:client', {'callback': onPickerApiLoad}); 
 
    } 
 

 
    function onAuthApiLoad() { 
 
    window.gapi.auth.authorize(
 
     { 
 
     'client_id': clientId, 
 
     'scope': scope, 
 
     'immediate': false 
 
     }, 
 
     handleAuthResult); 
 
    } 
 

 
    function onPickerApiLoad() { 
 
    pickerApiLoaded = true; 
 
    createPicker(); 
 
    } 
 

 
    function handleAuthResult(authResult) { 
 
    if (authResult && !authResult.error) { 
 
     oauthToken = authResult.access_token; 
 
     createPicker(); 
 
    } 
 
    } 
 

 
    // Create and render a Picker object 
 
    function createPicker() { 
 
    if (pickerApiLoaded && oauthToken) { 
 
     var view1 = new google.picker.DocsView(google.picker.ViewId.DOCS_IMAGES_AND_VIDEOS) 
 
     .setIncludeFolders(true) 
 
     .setSelectFolderEnabled(true); 
 
     var picker = new google.picker.PickerBuilder() 
 
     .enableFeature(google.picker.Feature.MULTISELECT_ENABLED) 
 
     .addView(view1) 
 
     .setAppId(appId) 
 
     .setOAuthToken(oauthToken) 
 
     .setDeveloperKey(developerKey) 
 
     .setCallback(pickerCallback) 
 
     .build(); 
 
     picker.setVisible(true); 
 
    } 
 
    } 
 

 
    // A simple callback implementation. 
 
    function pickerCallback(data) { 
 
    var doc = ""; 
 
    var fileID = ""; 
 
    if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) { 
 
     var gdurl = ""; 
 
     var type = "anyone"; 
 
     var role = "reader"; 
 
     for(var i = 0; i < data[google.picker.Response.DOCUMENTS].length; i++){ 
 
     doc = data[google.picker.Response.DOCUMENTS][i]; 
 
     gdurl = gdurl + " " + doc[google.picker.Document.URL]; 
 
     
 
     //change the file permissions to share with anyone with the link 
 
     fileID = doc[google.picker.Document.ID]; 
 
     var request1 = gapi.client.request({ 
 
      'path': '/drive/v3/files/' + fileID + '/permissions', 
 
      'method': 'POST', 
 
      'headers': { 
 
      'Content-Type': 'application/json', 
 
      'Authorization': 'Bearer ' + oauthToken 
 
      }, 
 
      'body':{ 
 
      'role': role, 
 
      'type': type 
 
      } 
 
     }); 
 
     request1.execute(function(resp) { 
 
      console.log(resp); 
 
     }); 
 
     } 
 
     // Form and display the message with hyperlinks included 
 
     var message = 'Google Drive media link(s): ' + gdurl; 
 
     alert('Success! Here are the hyperlinks for anyone to view: ' + message); 
 
    } 
 
    } 
 
    </script>
その後

ボタンは、HTMLのすべてを呼び出すためには:

<button onclick="onApiLoad()">Share via Google Drive</button>

関連する問題