4

ruby 用の Google Drive API を使用しており、ユーザー ドライブにファイルを挿入しようとしています。ファイルを正常に挿入できますが、ファイルのセルフリンクを取得しようとすると、これは返された URL https://www.googleapis.com/drive/v2/files/1PxrbKaO2xwOonUO0TB0FO3pkZDnSmRKTvIUmXw0vL6wです。認証されていないリクエストの数。

私はすべてのチュートリアルに従い、コードはほとんど同じであるため、私は認証されていると確信しています。

なぜこれが起こっているのか知っている人はいますか?ファイルを挿入できるのに、セルフ リンクを表示できないのはなぜですか?

ユーザーがオフライン アクセスでアプリを許可した後、ドライブにドキュメントを作成するコードを次に示します。

SCOPES = [
              'https://www.googleapis.com/auth/drive',
              'https://www.googleapis.com/auth/userinfo.email',
              'https://www.googleapis.com/auth/userinfo.profile'
          ]

class DriveAuthenticator

    def self.create_document(user, title, description, parent_title, user_array)
        client = DriveAuthenticator.initiate_client
        if user.google_id.present?
            if DriveAuthenticator.authenticate_client client, user
                parent_id = get_parent_id client, parent_title
                file_data = insert_empty_file client, title, description, DOCUMENT_MIME_TYPE, parent_id
                return file_data.selfLink
            end
        end
    end

    private
    def self.initiate_client
        client = Google::APIClient.new(:application_name => 'stuff_app')

        credentials = Google::APIClient::ClientSecrets.load

        client.authorization.client_id = credentials.client_id
        client.authorization.client_secret = credentials.client_secret
        client.authorization.redirect_uri = credentials.redirect_uris.first
        client.authorization.scope = SCOPES
        client
    end

    private
    def self.get_token_by_refresh_token(client, refresh_token)
        client.authorization.refresh_token = refresh_token
        client.authorization.grant_type = 'refresh_token'
        client.authorization.fetch_access_token!
    end

    private
    def self.insert_empty_file(client, title, description, mime_type, parent_id)
        drive = client.discovered_api('drive', 'v2')
        file = create_file_schema drive, title, description, mime_type, parent_id
        result = client.execute(
          :api_method => drive.files.insert,
          :body_object => file)
        if result.status == 200
            result.data
        else
            puts "An error occurred: #{result.data['error']['message']}"
            nil
        end
    end

    private
    def self.create_file_schema(drive, title, description, mime_type, parent_id)
        file = drive.files.insert.request_schema.new({
            'title' => title,
            'description' => description,
            'mimeType' => mime_type
        })
        file.parents = [{'id' => parent_id}]
        file
    end

end
4

2 に答える 2

3

ブラウザでその URL を開こうとしていますか? ファイルのセルフ リンクにアクセスするには承認が必要であり、承認された GET 要求をその URL に送信してメタデータを取得する必要があります。

Google ドライブ SDK ドキュメントのリファレンス ガイドには、ファイルのメタデータとコンテンツを取得する方法が示されています。

https://developers.google.com/drive/v2/reference/files/get

ドライブからファイルをダウンロードする方法については、次のドキュメントを参照してください。ブラウザでファイルを開く方法も含まれます。

https://developers.google.com/drive/manage-downloads

于 2013-02-23T21:04:44.887 に答える