2016-08-04 39 views
0

Ich versuche, die gmail api für das zuzugreifen ich diesen rubygmail Führung verwende aber jedes Mal wenn ich versuche, den Code erhalte ich unterschiedliche Fehler laufen Ich verwende diesen Code:Wie gmail api mit Ruby zugreifen?

require 'google/apis/gmail_v1' 
    require 'googleauth' 
    require 'googleauth/stores/file_token_store' 

    require 'fileutils' 

    OOB_URI = 'urn:ietf:wg:oauth:2.0:oob' 
    APPLICATION_NAME = 'Gmail API Ruby Quickstart' 
    CLIENT_SECRETS_PATH = 'client_secret.json' 
    CREDENTIALS_PATH = File.join(Dir.home, '.credentials', 
           "gmail-ruby-quickstart.yaml") 
    SCOPE = Google::Apis::GmailV1::AUTH_GMAIL_READONLY 

    ## 
    # Ensure valid credentials, either by restoring from the saved credentials 
    # files or intitiating an OAuth2 authorization. If authorization is required, 
    # the user's default browser will be launched to approve the request. 
    # 
    # @return [Google::Auth::UserRefreshCredentials] OAuth2 credentials 
    def authorize 
    FileUtils.mkdir_p(File.dirname(CREDENTIALS_PATH)) 

    client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH) 
    token_store = Google::Auth::Stores::FileTokenStore.new(:file => 'gmail-ruby-quickstart.yaml') 
    authorizer = Google::Auth::UserAuthorizer.new(
     client_id, SCOPE, token_store) 
    user_id = 'me' 
    credentials = authorizer.get_credentials(user_id) 
    if credentials.nil? 
     url = authorizer.get_authorization_url(
     base_url: OOB_URI) 
     puts "Open the following URL in the browser and enter the " + 
      "resulting code after authorization" 
     puts url 
     code = gets 
     credentials = authorizer.get_and_store_credentials_from_code(
     user_id: user_id, code: code, base_url: OOB_URI) 
    end 
    credentials 
    end 

    # Initialize the API 
    service = Google::Apis::GmailV1::GmailService.new 
    service.client_options.application_name = APPLICATION_NAME 
    service.authorization = authorize 

    # Show the user's labels 
    user_id = 'me' 
    result = service.list_user_labels(user_id) 

    puts "Labels:" 
    puts "No labels found" if result.labels.empty? 
    result.labels.each { |label| puts "- #{label.name}" } 

Wenn bei mir läuft die ruby-Code erhalte ich diese Fehlermeldung:

 [email protected]:~/gmail$ ruby quickstart.rb 
    /home/nilay/.rbenv/versions/2.3.1/lib/ruby/2.3.0/pstore.rb:414:in `load_data': PStore file seems to be corrupted. (PStore::Error) 
    from /home/nilay/.rbenv/versions/2.3.1/lib/ruby/2.3.0/pstore.rb:328:in `transaction' 
    from /home/nilay/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/googleauth-0.5.1/lib/googleauth/stores/file_token_store.rb:49:in `load' 
    from /home/nilay/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/googleauth-0.5.1/lib/googleauth/user_authorizer.rb:130:in `get_credentials' 
    from quickstart.rb:28:in `authorize' 
    from quickstart.rb:45:in `<main>' 

Wie kann ich dieses Problem beheben mir bitte helfen.

+0

Die drei Linien, die Sie keinen Fehler dar geschrieben haben. Sie haben einen Teil der Ablaufverfolgung veröffentlicht, aber die eigentliche Fehlermeldung abgeschnitten. – MarsAtomic

+0

Jetzt habe ich ganzen Fehler hinzugefügt –

+0

Sie können versuchen, die Lösung in diesem [thread] (http://docs.ruby-lang.org/en/2.2.0/PStore.html) zu folgen, Standardmäßig ist die Dateiintegrität Dies ist nur gewährleistet, solange das Betriebssystem keine unerwarteten E/A-Fehler verursacht. Wenn ein E/A-Fehler auftritt, während ** PStore ** in seine Datei schreibt, wird die Datei beschädigt. Sie können dies verhindern, indem Sie 'pstore.ultra_safe = true' setzen. Hinweis: Wenn Sie wertvolle Daten mit ** PStore ** speichern, sollten Sie die ** PStore ** -Dateien von Zeit zu Zeit sichern. Überprüfen Sie diesen Link für mehr [info] (https://github.com/sj26/ruby-1.9.3-p0/blob/master/lib/pstore.rb) – KENdi

Antwort