Jump to content

dsfcraig

Member
  • Posts

    3
  • Joined

  • Last visited

Posts posted by dsfcraig

  1. Hi pier, it looks like you've created your function but haven't actually called it as part of your script.

     

    You may wish to add the below to the bottom of your script.

    if __name__ == '__main__':
        wf = Workflow()
        log = wf.logger
        sys.exit(wf.run(main))
    

    Also, you might not know that Alfred has a debug tool which is really handy to check what is/isn't working in your code. If you click the debug icon in the top right corner of your Workflow, you get a neat popout which gives you the same thing you'd expect in Terminal or cmd. Let us know how you get on :)

  2. Thanks deanish.

     

    I got trigger happy with the screenshot and noticed I had accidentally deleted the end quote :)

     

    That said, turned out not to be the problem and the debugger absolutely helped. Immediately it threw errors for my import python packages. Turns out that I needed to have the correct packages installed in the workflow dir (http://alfredworkflow.readthedocs.org/en/latest/user-manual/third-party.html). Fixed that and now it all works great!

     

    Thanks for your help.

  3. I'm feeling both irritated and dumb right now, so hoping somebody can point me to where I'm going wrong, because I'm sure it's something obvious.

     

    I'm trying to create a workflow which displays the Rooms available to me through Google Calendar.

     

    My keyword is 'rooms' and my argument is a number (15, 30 or 60). The workflow should return/display the rooms which are not booked for that number of minutes.

     

    I taught myself Python (badly...), figured out OAuth, figured out how to return and parse the busy/free results from Google's Cal API and figured out how to name my rooms to return/print the room name. Where I'm stuck, is returning the room names to Alfred.

     

    I've read through the examples and documentation of Workflow, so I  am trying, but pretty much stuck.

     

    Right now, when I type in "Rooms", hit spacebar and type in my first number, it just pushes me back to the default google search.

     

    I know my code sucks, it's a hacky copy paste and there will be a LOT wrong with it. I'm not looking for comments on my awful python skills, but am looking to understand why it's not returning results.

     

    What am I missing??

     

    28qsqxu.png

    #!/usr/bin/python
    # encoding: utf-8
    
    from __future__ import print_function, unicode_literals
    import httplib2
    import os
    import json
    import sys
    import oauth2client
    from pprint import pprint
    from workflow import Workflow, web
    from apiclient import discovery
    from oauth2client import client
    from oauth2client import tools
    from datetime import datetime, timedelta
    
    log = None
    
    SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'
    CLIENT_SECRET_FILE = 'client_secret.json'
    APPLICATION_NAME = 'Google Calendar API Python Quickstart'
    ROOM_IDS = {"someroom" : "somename", "someroom" : "somename", "someroom" : "somename", "someroom" : "somename"}
    
    def get_credentials():
    
        home_dir = os.path.expanduser('~')
        credential_dir = os.path.join(home_dir, '.credentials')
        if not os.path.exists(credential_dir):
            os.makedirs(credential_dir)
        credential_path = os.path.join(credential_dir,
                                       'calendar-python-quickstart.json')
    
        store = oauth2client.file.Storage(credential_path)
        credentials = store.get()
        if not credentials or credentials.invalid:
            flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
            flow.user_agent = APPLICATION_NAME
            if flags:
                credentials = tools.run_flow(flow, store, flags)
            else: # Needed only for compatibility with Python 2.6
                credentials = tools.run(flow, store)
            print('Storing credentials to ' + credential_path)
        return credentials
    
    def main(wf):
        credentials = get_credentials()
        http = credentials.authorize(httplib2.Http())
        service = discovery.build('calendar', 'v3', http=http)
        args = wf.args[0]
        starting = datetime.utcnow().isoformat() + 'Z'
        ending = (datetime.utcnow() + timedelta(minutes=args).isoformat() + 'Z'
        freebusy_query = {"timeMin" : starting, "timeMax" : ending, "items" : [{
                                                                               "id": "someroom"
                                                                               },
                                                                               {
                                                                               "id": "someroom"
                                                                               },
                                                                               {
                                                                               "id": "someroom"
                                                                               },
                                                                               {
                                                                               "id": "someroom"
                                                                               }]}
        Result = service.freebusy().query(body=freebusy_query).execute()
        rooms = Result.get('calendars', [])
        rooms.raise_for_status()
        for room in rooms:
            busy = rooms[room]
            for times in busy:
                listing = busy[times]
                if listing == []:
                    wf.add_item(title=ROOM_IDS[room])
        wf.send_feedback()
    
    if __name__ == '__main__':
        wf = Workflow()
        log = wf.logger
        sys.exit(wf.run(main))
    
×
×
  • Create New...