2016-09-20 2 views
-1

Pythonコード i.e www.example.com/auth/gmailを使用していくつかのウェブサイトにログインするにはどうすればよいですか。ユーザーログイン用のGoogle + APIを利用しています。今、私は自分の資格情報(GmailまたはWhat?)でPythonコードを使用してログインしたいと思います。この問題に近づく方法を教えてください。pythonを使用してgoogle + APIによって認証されたウェブサイトにログインするにはどうすればよいですか?

おかげ

答えて

0

が、これは古い(サンドボックス)であるので、本当に速く行われ、あなたはコードをここ

import re 
import sys 
import imaplib 
import getpass 
import email 
import datetime 
import string 
import get_mail_search 
from sys import stdout 

M = imaplib.IMAP4_SSL('imap.gmail.com') 
class Get_mail(object): 
    """docstring for Get_mail""" 
    def __init__(self, *args): 
     super(Get_mail, self).__init__() 
     c=1 
     self.login(c) 
     self.toast_msg() 

     raw_input() 
    def toast_msg(self, *args): 
     """docstring for Get_mail""" 
     M = self.mailbox() 
     stdout.write("\n{}\n".format(get_mail_search.search_help_info)) 
     serach_input = raw_input() 
     rv, data = M.search(None, serach_input) 
     if rv != 'OK': 
      print "No messages found!" 
     id_ls = data[0].split() 
     rev_id_ls = [i for i in reversed(id_ls)] 
     if rev_id_ls: 
      for o in rev_id_ls: 
       try: 
        msg_content = self.process_mailbox(M, o) 
        _date_ = msg_content[0] 
        _from_ = msg_content[1] 
        _to_ = msg_content[2] 
        _subject_ = msg_content[3] 
        _msg_ = msg_content[4] 
        stdout.write("$$$$$$$$$$$\nDate: {}\nFrom: {}\nTo: {}\nSubject: {}\nMSG: {}\n".format(_date_,_from_,_to_,_subject_,_msg_)) 
       except Exception, e: 
        pass 
     else: 
      stdout.write("No {} Mail Found!".format(serach_input)) 
      raw_input() 
      self.toast_msg() 

    def login(self, try_c, *args): 
     """docstring for Get_mail""" 
     try: 
      stdout.write("\nMail:\n") 
      mail = raw_input() 
      if mail: 
       M.login(str(mail), getpass.getpass()) 
      else: 
       sys.exit(1) 
     except imaplib.IMAP4.error: 
      if try_c<=3: 
       stdout.write("Versuch: {}/3\n".format(try_c)) 
       stdout.write("Die eingegebene E-Mail-Adresse und das Passwort stimmen nicht uberein. Nochmal versuchen") 
       try_c+=1 
       self.login(try_c) 
      else: 
       sys.exit(1) 
    def mailbox(self, *args): 
     """docstring for Get_mail""" 
     rv, mailboxes = M.list() 
     if rv == 'OK': 
      for menu in mailboxes: 
       print('{}'.format(menu)) 
      rv, data = M.select("inbox") 
      if rv == 'OK': 
       return M 
    def eval_decode(self, header, *args): 
     """docstring for Get_mail""" 
     return email.Header.decode_header(header)[0] 

    def process_mailbox(self, M, num, *args): 
     """docstring for Get_mail""" 
     rv, header = M.fetch(num, '(RFC822)') 
     if rv != 'OK': 
      print "ERROR getting message", num 
     header_msg = email.message_from_string(header[0][1]) 
     if header_msg.is_multipart(): 
      body=[payload.get_payload(decode=True) for payload in header_msg.get_payload()] 
     else: 
      body=payload.get_payload(decode=True) 
     from_decode = self.eval_decode(header_msg['From']) 
     subject_decode = self.eval_decode(header_msg['Subject']) 
     date_decode = self.eval_decode(header_msg['Date']) 
     to_decode = self.eval_decode(header_msg['To']) 
     return (date_decode[0], from_decode[0], to_decode[0], subject_decode[0], str(body[0])) 
def run(): 
    try: 
     Get_mail() 
    except KeyboardInterrupt: 
     M.close() 
     M.logout() 
     sys.exit(1) 
run() 
1

をリファクタリングする必要があり、あなたはグーグル-API-のpython-クライアントを使用しての例を持っています まず、Googleの開発者コンソールでクライアントの秘密を作成する必要があります。

初めてコードを実行すると、gmailアカウントを使用するようにスクリプトを認証する必要があります。例のようにファイルに証明書を保存し、この認証を必要とせずに将来の実行に使用できます。

from googleapiclient.discovery import build 
from oauth2client import client 
from googleapiclient.errors import HttpError 
import base64 
from email.mime.text import MIMEText 
from apiclient import errors 
from oauth2client import client 
import httplib2 
from googleapiclient.discovery import build 


def getCredentials(secrets, scope,filename): 
    flow = client.flow_from_clientsecrets(
      secrets, 
      scope=scope, 
      redirect_uri='urn:ietf:wg:oauth:2.0:oob') 
    auth_uri = flow.step1_get_authorize_url() 
    webbrowser.open(auth_uri) 
    auth_code = raw_input('Enter the auth code: ') 
    credentials = flow.step2_exchange(auth_code) 
    saveJson(filename,credentials.to_json()) 


def saveJson(filename, object): 
    with open(filename, 'w') as f: 
     json.dump(object, f) 

def openJson(filename): 
    with open(filename, 'r') as f: 
     object = json.load(f) 
    return object 

if __name__=='__main__': 
    client_secrets = 'client_secrets.json' #client secrets to use the API 
    credentials = 'auth_credentials.json' 
    if(firstRun) #create a file with the auth credentials 
     scope = 'https://www.googleapis.com/auth/gemail.send' 
     getCredentials(secrets,scope,credentials) 

    cre = client.Credentials.new_from_json(openJson(credentials)) 
    http_auth = cre.authorize(httplib2.Http()) 
    gmail = build('gmail', 'v1', http=http_auth) 
    #gmail.doSomething 
関連する問題