Exemple #1
0
def doSearch():
    q = sys.argv[1:]
    q = ' '.join(q)
    if len(q) < 5:
        return

    requestList = [
        "Operation=ItemSearch", "SearchIndex=KindleStore", "Sort=relevancerank"
    ]
    # requestList.append(urllib.urlencode({"Keywords": q}))
    # kw = q.replace(" ", ",")
    # requestList.append("Keywords=%s" % kw)

    requestDict = encodeRequestList(requestList, "ItemIds", keywords=q)

    searchRequest = PyAl.Request("http://webservices.amazon.co.uk/onca/xml",
                                 requestDict)
    soup = searchRequest.souper()

    resultsFeedback = PyAl.Feedback()
    if soup.find("error"):
        e = soup.error.message.string
        resultsFeedback.add(PyAl.Item(title="Bad Request", subtitle=e))

    else:
        asins = soup.find_all("asin")

        for asin in asins:
            aResult = getData(asin.string)
            resultItem = PyAl.Item()
            resultItem.fromDictionary(aResult)
            resultsFeedback.add(resultItem)

    print resultsFeedback
Exemple #2
0
def cacheIcon(url):
    iconRequest = PyAl.Request(url)

    covercache = PyAl.volatile("covercache")
    if not os.path.exists(covercache):
        os.makedirs(covercache)

    (_, filename) = os.path.split(url)
    iconPath = os.path.join(covercache, filename)
    with open(iconPath, "wb") as f:
        f.write(iconRequest.request.content)

    return iconPath
Exemple #3
0
def rtSearch():
    q = sys.argv[1]
    if len(q) < 3:
        return

    items = map(lambda x: resultParse(x), search_for(q))

    feedback = PyAl.Feedback()
    bundleID = PyAl.bundle()
    for anItem in items:
        uid = bundleID + anItem.pop("uid")
        arg = anItem.pop("arg")
        feedback.addItem(argsDict={'uid':uid, 'arg':arg}, itemDict=anItem)

    print feedback
Exemple #4
0
def search_for(query):
    args = {'q': query, 'page_limit': '9', 'page': '1', "apikey": "88c6ww77pac55ybxsn5dmhqp"}
    rt_api = "http://api.rottentomatoes.com/api/public/v1.0/movies.json"
    myScraper = PyAl.Request(rt_api, args)
    theResult = myScraper.request.json

    return theResult['movies']
Exemple #5
0
def cacheIcon(url):
    iconRequest = PyAl.Request(url)

    covercache = PyAl.volatile("covercache")
    if not os.path.exists(covercache):
        os.makedirs(covercache)

    (_, filename) = os.path.split(url)
    iconPath = os.path.join(covercache, filename)
    with open(iconPath, "wb") as f:
        f.write(iconRequest.request.content)

    return iconPath
Exemple #6
0
def getData(asin):
    requestList = [
        "Operation=ItemLookup",
        "ItemId=%s" % asin,
    ]
    requestDict = encodeRequestList(requestList, "Medium")
    itemRequest = PyAl.Request("http://webservices.amazon.com/onca/xml",
                               requestDict)
    soup = itemRequest.souper()
    try:
        imageURL = soup.find("smallimage").url.string
        imagePath = cacheIcon(imageURL)
    except Exception:
        imagePath = "icon.png"
    try:
        link = soup.find("detailpageurl").string
    except Exception:
        link = "http://www.amazon.com/dp/%s" % asin
    try:
        title = soup.find("title").string
    except Exception:
        title = "Title Missing"
    try:
        author = soup.find("author").string
    except Exception:
        author = "Author Missing"
    try:
        price = soup.find("listprice").formattedprice.string
    except Exception:
        price = "Price Missing"

    returnDict = {
        "uid": asin,
        "arg": link,
        "title": title,
        "subtitle": u"%s\u2014%s" % (author, price),
        "icon": imagePath
    }

    return returnDict
Exemple #7
0
def main():
    serversJSON = PyAl.nonvolatile("servers.json")
    bundleID = PyAl.bundle()

    with open(serversJSON) as f:
        servers = json.load(f)

    if sys.argv[1] == "add":
        name = sys.argv[2]
        user = sys.argv[3]
        pw = sys.argv[4]
        address = sys.argv[5]
        path = sys.argv[6]
        if len(sys.argv) == 8:
            url = sys.argv[7]
            if not url.endswith("/"):
                url = url + "/"
        else:
            url = None

        if not path.endswith("/"):
            path = path + "/"

        serverData = {"user": user, "address": address, "path": path, "url": url}
        servers[name] = serverData

        k = PyAl.Keychain("%s.%s" % (bundleID, address))
        k.storePassword(user, pw)

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Added %s (%s@%s)" % (name, user, address)

    if sys.argv[1] == "remove":
        name = sys.argv[2]
        delServerData = servers.pop(name)

        k = PyAl.Keychain("%s.%s" % (bundleID, delServerData["address"]))
        k.deletePassword(delServerData["user"])

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Deleted %s (%s@%s)" % (name, delServerData["user"], delServerData["address"])

    if sys.argv[1] == "finder":
        name = sys.argv[2]
        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        pathList = subprocess.check_output(["osascript", "getFinder.applescript"])
        pathList = pathList.split(" , ")

        cleanPaths = []
        for path in pathList:
            if len(path):
                newPath = path[1:]
                if "'" in newPath:
                    newPath = newPath.replace("'", "")
                if ", " in newPath:
                    newPath = newPath.replace(", ", "")
                if "\n" in newPath:
                    newPath = newPath.replace("\n", "")
                cleanPaths.append(newPath)
        doUpload(serverData, cleanPaths)

    if sys.argv[1] == "path":
        name = sys.argv[2]
        pathList = sys.argv[3]

        pathSplit = re.compile(" (?=/|~)")
        pathList = re.split(pathSplit, pathList)

        for path in pathList:
            if "~" in path:
                pathList.remove(path)
                path = os.path.expanduser(path)
                pathList.append(path)

        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)

    if sys.argv[1] == "setdefault":
        name = sys.argv[2]
        serverData = servers[name]

        servers["default"] = serverData

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Designated %s (%s@%s) default." % (name, serverData["user"], serverData["address"])

    if sys.argv[1] == "default":
        path = sys.argv[2]

        pathList = path.split("\t")

        try:
            serverData = servers["default"]
        except KeyError:
            print "No default server designated."
            return

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)
Exemple #8
0
def main():
    verb = sys.argv[1]

    if verb == "add":
        name = sys.argv[2]
        path = sys.argv[3]

        if "~" in path:
            path = os.path.expanduser(path)

        with open(PyAl.nonvolatile("scratches.json"), "r") as f:
            scratchList = json.load(f)
            f.close()

        if not os.path.isabs(path):
            path = os.path.join(PyAl.nonvolatile(), path)

        if os.path.isdir(path):
            path = os.path.join(path, name)

        scratchList[name] = path

        with open(PyAl.nonvolatile("scratches.json"), "w") as f:
            json.dump(scratchList, f)
            f.close()

        with open(path, "w") as f:
            f.write("\n")
            f.close()

        print "Added %s (%s)." % (name, path)

    elif verb == "remove":
        with open(PyAl.nonvolatile("scratches.json"), "r") as f:
            scratchList = json.load(f)
            f.close()

        try:
            name = sys.argv[2]
            deleted = scratchList.pop(name)
        except Exception as e:
            print "%s does not exist: %s" % (name, e)
            return

        path = deleted
        os.remove(path)

        with open(PyAl.nonvolatile("scratches.json"), "w") as f:
            json.dump(scratchList, f)

            f.close()

        print "Deleted %s (%s)." % (name, path)

    elif verb == "scratch":
        name = sys.argv[2]
        toScratch = sys.argv[3]

        with open(PyAl.nonvolatile("scratches.json"), "r") as f:
            scratchList = json.load(f)
            f.close()
        try:
            path = scratchList[name]
        except Exception as e:
            print "%s does not exist: %s" % (name, e)
            return

        cmd = 'sed -i "" -e "1i\\ \n - %s" "%s"' % (toScratch, path)

        subprocess.call(cmd, shell=True)

        # print "Scratched to %s (%s)." % (name, path)
        print toScratch

    else:
        print "Unknown error in act.py"
Exemple #9
0
def main():
    serversJSON = PyAl.nonvolatile("servers.json")
    errorItem = I(valid=False, title="No saved servers!", subtitle="You must store a server first.")

    if os.path.exists(serversJSON):
        with open(serversJSON) as f:
            servers = json.load(f)
    else:
        empty = {}
        with open(serversJSON, "w") as f:
            json.dump(empty, f)
        servers = {}

    if len(sys.argv) == 1:
        items = [I(valid=False, autocomplete="add ",
            title="Add Server to Favorites", subtitle="Store server information securely in the Keychain.")]
        if len(servers) > 0:
            items.append(I(valid=False, autocomplete="upload ",
                title="Upload to Server", subtitle="Select a server to upload to."))
            items.append(I(valid=False, autocomplete="remove ",
                title="Remove Server from Favorites", subtitle="Forget a server's information."))
            items.append(I(valid=False, autocomplete="default ",
                title="Set Default Server", subtitle="Designate a default server for file actions."))
        print F(items)

    elif sys.argv[1] == "add":
        if len(sys.argv) == 2:
            name = "[name]"
            user = "******"
            pw = ""
            masked = "[password]"
            address = "[address]"
            path = "[path]"
            url = "[baseurl]"
            item = I(valid=False, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        elif len(sys.argv) == 3:
            name = sys.argv[2]
            user = "******"
            pw = ""
            masked = "[password]"
            address = "[address]"
            path = "[path]"
            url = "[baseurl]"
            item = I(valid=False, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        elif len(sys.argv) == 4:
            name = sys.argv[2]
            user = sys.argv[3]
            pw = ""
            masked = "[password]"
            address = "[address]"
            path = "[path]"
            url = "[baseurl]"
            item = I(valid=False, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        elif len(sys.argv) == 5:
            name = sys.argv[2]
            user = sys.argv[3]
            pw = sys.argv[4]
            masked = u"\u2022" * len(pw)
            address = "[address]"
            path = "[path]"
            url = "[baseurl]"
            item = I(valid=False, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        elif len(sys.argv) == 6:
            name = sys.argv[2]
            user = sys.argv[3]
            pw = sys.argv[4]
            masked = u"\u2022" * len(pw)
            address = sys.argv[5]
            path = "[path]"
            url = "[baseurl]"
            item = I(valid=False, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        elif len(sys.argv) == 7:
            name = sys.argv[2]
            user = sys.argv[3]
            pw = sys.argv[4]
            masked = u"\u2022" * len(pw)
            address = sys.argv[5]
            path = sys.argv[6]
            url = "[baseurl]"
            item = I(valid=True, title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url),
                arg="add \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"" % (name, user, pw, address, path))

        elif len(sys.argv) == 8:
            name = sys.argv[2]
            user = sys.argv[3]
            pw = sys.argv[4]
            masked = u"\u2022" * len(pw)
            address = sys.argv[5]
            path = sys.argv[6]
            url = sys.argv[7]
            item = I(valid=True, arg="add \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"" % (name, user, pw, address, path, url),
                title="Save %s" % name, subtitle="%s %s %s %s %s %s" % (name, user, masked, address, path, url))

        print F(item)

    elif sys.argv[1] == "remove":
        if len(servers) < 1:
            items = errorItem
        else:
            items = []
            for server in servers.keys():
                name = server
                serverDict = servers[name]
                address = serverDict["address"]
                user = serverDict["user"]
                items.append(I(valid=True, arg="remove \"%s\"" % name, uid=name,
                    title="Remove " + name, subtitle="%s@%s" % (user, address)))
        print F(items)

    elif sys.argv[1] == "upload":
        if len(servers) < 1:
            items = errorItem
        else:
            if len(sys.argv) == 2:
                items = []
                for server in servers.keys():
                    if server != "default":
                        name = server
                        serverDict = servers[name]
                        address = serverDict["address"]
                        user = serverDict["user"]
                        items.append(I(valid=False, autocomplete="upload %s" % name,
                            title="Upload to %s" % name, subtitle="%s@%s" % (user, address)))
            elif len(sys.argv) == 3:
                name = sys.argv[2]
                items = I(valid=True, arg="finder \"%s\"" % name, uid=name,
                    title="Finder to %s" % name, subtitle="Upload Finder selection to %s." % name)
            elif len(sys.argv) == 4:
                name = sys.argv[2]
                path = sys.argv[3]
                items = I(valid=True, arg="path \"%s\" \"%s\"" % (name, path), uid=name, icon=path, fileIcon=True,
                    title="Path to %s" % name, subtitle="Upload '%s' to %s." % (path, name))

        print F(items)

    elif sys.argv[1] == "default":
        if len(servers) < 1:
            items = errorItem
        else:
            items = []
            for server in servers.keys():
                name = server
                serverDict = servers[name]
                address = serverDict["address"]
                user = serverDict["user"]
                items.append(I(valid=True, arg="setdefault %s" % name,
                    title="Set '%s' as Default" % name, subtitle="%s@%s" % (user, address)))

        print F(items)
Exemple #10
0
def main():
    serversJSON = PyAl.nonvolatile("servers.json")
    bundleID = PyAl.bundle()

    with open(serversJSON) as f:
        servers = json.load(f)

    if sys.argv[1] == "add":
        name = sys.argv[2]
        user = sys.argv[3]
        pw = sys.argv[4]
        address = sys.argv[5]
        path = sys.argv[6]
        if len(sys.argv) == 8:
            url = sys.argv[7]
            if not url.endswith("/"):
                url = url + "/"
        else:
            url = None

        if not path.endswith("/"):
            path = path + "/"

        serverData = {
            "user": user,
            "address": address,
            "path": path,
            "url": url
        }
        servers[name] = serverData

        k = PyAl.Keychain("%s.%s" % (bundleID, address))
        k.storePassword(user, pw)

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Added %s (%s@%s)" % (name, user, address)

    if sys.argv[1] == "remove":
        name = sys.argv[2]
        delServerData = servers.pop(name)

        k = PyAl.Keychain("%s.%s" % (bundleID, delServerData["address"]))
        k.deletePassword(delServerData["user"])

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Deleted %s (%s@%s)" % (name, delServerData["user"],
                                      delServerData["address"])

    if sys.argv[1] == "finder":
        name = sys.argv[2]
        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        pathList = subprocess.check_output(
            ["osascript", "getFinder.applescript"])
        pathList = pathList.split(" , ")

        cleanPaths = []
        for path in pathList:
            if len(path):
                newPath = path[1:]
                if "'" in newPath:
                    newPath = newPath.replace("'", "")
                if ", " in newPath:
                    newPath = newPath.replace(", ", "")
                if "\n" in newPath:
                    newPath = newPath.replace("\n", "")
                cleanPaths.append(newPath)
        doUpload(serverData, cleanPaths)

    if sys.argv[1] == "path":
        name = sys.argv[2]
        pathList = sys.argv[3]

        pathSplit = re.compile(" (?=/|~)")
        pathList = re.split(pathSplit, pathList)

        for path in pathList:
            if "~" in path:
                pathList.remove(path)
                path = os.path.expanduser(path)
                pathList.append(path)

        serverData = servers[name]

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)

    if sys.argv[1] == "setdefault":
        name = sys.argv[2]
        serverData = servers[name]

        servers["default"] = serverData

        with open(serversJSON, "w") as f:
            json.dump(servers, f)

        print "Designated %s (%s@%s) default." % (name, serverData["user"],
                                                  serverData["address"])

    if sys.argv[1] == "default":
        path = sys.argv[2]

        pathList = path.split("\t")

        try:
            serverData = servers["default"]
        except KeyError:
            print "No default server designated."
            return

        k = PyAl.Keychain("%s.%s" % (bundleID, serverData["address"]))
        serverData["pw"] = k.retrievePassword(serverData["user"])

        doUpload(serverData, pathList)
Exemple #11
0
def main():
    q = sys.argv[1]
    args = q.split(" ")

    if os.path.exists(PyAl.nonvolatile("scratches.json")):
        with open(PyAl.nonvolatile("scratches.json"), "r") as f:
            scratchList = json.load(f)
            f.close()
    else:
        with open(PyAl.nonvolatile("scratches.json"), "w") as f:
            scratchList = {}
            json.dump(scratchList, f)
            f.close()

    if len(args) == 0 or args[0] == "":
        emptyFeedback = PyAl.Feedback()
        emptyFeedback.addInvalidItem(
            uid="com.danielsh.alfred.scratch.addscratch",
            autocomplete="add ",
            itemDict={
                "title": "Add Scratch File",
                "subtitle": "A name, a space, and a path."
            })
        if len(scratchList) > 0:
            emptyFeedback.addInvalidItem(
                uid="com.danielsh.alfred.scratch.removescratch",
                autocomplete="remove ",
                itemDict={
                    "title": "Remove Scratch File",
                    "subtitle": "List scratches to delete."
                })

            for (name, path) in scratchList.iteritems():
                emptyFeedback.addInvalidItem(
                    uid="com.danielsh.alfred.scratch.%s" % name,
                    autocomplete="%s " % name,
                    itemDict={
                        "title": name,
                        "subtitle": path
                    })

        print emptyFeedback

    elif args[0] == "add":
        addFeedback = PyAl.Feedback()
        if len(args) == 2:
            name = args[1] if len(args[1]) else "[name]"
            path = ""

            addFeedback.addInvalidItem(
                uid="com.danielsh.alfred.scratch.addscratch.%s" % name,
                autocomplete="add %s" % name,
                itemDict={
                    "title": "Add %s" % name,
                    "subtitle": "At [path]"
                })
        elif len(args) == 3:
            name = args[1]
            path = args[2]

            addFeedback.addValidItem(
                uid="com.danielsh.alfred.scratch.addscratch.%s" % name,
                arg="add \"%s\" \"%s\"" % (name, path),
                itemDict={
                    "title": "Add %s" % name,
                    "subtitle": "At %s" % path
                })
        elif len(args) > 3:
            name = args[1]
            path = args[2:]
            path = ' '.join(path)

            addFeedback.addValidItem(
                uid="com.danielsh.alfred.scratch.addscratch.%s" % name,
                arg="add \"%s\" \"%s\"" % (name, path),
                itemDict={
                    "title": "Add %s" % name,
                    "subtitle": "At %s" % path
                })
        print addFeedback

    elif args[0] == "remove":
        removeFeedback = PyAl.Feedback()
        if len(scratchList) > 0:
            for (name, path) in scratchList.iteritems():
                removeFeedback.addValidItem(
                    uid="com.danielsh.alfred.scratch.removescratch.%s" % name,
                    arg="remove \"%s\"" % name,
                    itemDict={
                        "title": "Remove %s" % name,
                        "subtitle": "From %s" % path
                    })
        else:
            return

        print removeFeedback

    else:
        if len(scratchList) == 0:
            return
        else:
            scratchFeedback = PyAl.Feedback()
            if args[0] in scratchList.keys():
                name = args[0]
                path = scratchList[name]
                if len(args) >= 2:
                    toScratch = args[1:]
                    toScratch = ' '.join(toScratch)

                    if '"' in toScratch:
                        toScratch = re.sub("\"", "'", toScratch)
                else:
                    toScratch = ""

                scratchFeedback.addValidItem(
                    uid="com.danielsh.alfred.scratch.%s" % name,
                    arg="scratch \"%s\" \"%s\"" % (name, toScratch),
                    itemDict={
                        "title": "Scratch to %s:" % name,
                        "subtitle": toScratch
                    })
            else:
                return

            print scratchFeedback
Exemple #12
0
def main():
    q = sys.argv[1]
    args = q.split(" ")

    if os.path.exists(PyAl.nonvolatile("scratches.json")):
        with open(PyAl.nonvolatile("scratches.json"), "r") as f:
            scratchList = json.load(f)
            f.close()
    else:
        with open(PyAl.nonvolatile("scratches.json"), "w") as f:
            scratchList = {}
            json.dump(scratchList, f)
            f.close()

    if len(args) == 0 or args[0] == "":
        emptyFeedback = PyAl.Feedback()
        emptyFeedback.addInvalidItem(uid="com.danielsh.alfred.scratch.addscratch", autocomplete="add ",
                                    itemDict={"title": "Add Scratch File", "subtitle": "A name, a space, and a path."})
        if len(scratchList) > 0:
            emptyFeedback.addInvalidItem(uid="com.danielsh.alfred.scratch.removescratch", autocomplete="remove ",
                                        itemDict={"title": "Remove Scratch File", "subtitle": "List scratches to delete."})

            for (name, path) in scratchList.iteritems():
                emptyFeedback.addInvalidItem(uid="com.danielsh.alfred.scratch.%s" % name, autocomplete="%s " % name,
                                        itemDict={"title": name, "subtitle": path})

        print emptyFeedback

    elif args[0] == "add":
        addFeedback = PyAl.Feedback()
        if len(args) == 2:
            name = args[1] if len(args[1]) else "[name]"
            path = ""

            addFeedback.addInvalidItem(uid="com.danielsh.alfred.scratch.addscratch.%s" % name, autocomplete="add %s" % name,
                                itemDict={"title": "Add %s" % name, "subtitle": "At [path]"})
        elif len(args) == 3:
            name = args[1]
            path = args[2]

            addFeedback.addValidItem(uid="com.danielsh.alfred.scratch.addscratch.%s" % name, arg="add \"%s\" \"%s\"" % (name, path),
                                itemDict={"title": "Add %s" % name, "subtitle": "At %s" % path})
        elif len(args) > 3:
            name = args[1]
            path = args[2:]
            path = ' '.join(path)

            addFeedback.addValidItem(uid="com.danielsh.alfred.scratch.addscratch.%s" % name, arg="add \"%s\" \"%s\"" % (name, path),
                                itemDict={"title": "Add %s" % name, "subtitle": "At %s" % path})
        print addFeedback

    elif args[0] == "remove":
        removeFeedback = PyAl.Feedback()
        if len(scratchList) > 0:
            for (name, path) in scratchList.iteritems():
                removeFeedback.addValidItem(uid="com.danielsh.alfred.scratch.removescratch.%s" % name, arg="remove \"%s\"" % name,
                                itemDict={"title": "Remove %s" % name, "subtitle": "From %s" % path})
        else:
            return

        print removeFeedback

    else:
        if len(scratchList) == 0:
            return
        else:
            scratchFeedback = PyAl.Feedback()
            if args[0] in scratchList.keys():
                name = args[0]
                path = scratchList[name]
                if len(args) >= 2:
                    toScratch = args[1:]
                    toScratch = ' '.join(toScratch)

                    if '"' in toScratch:
                        toScratch = re.sub("\"", "'", toScratch)
                else:
                    toScratch = ""

                scratchFeedback.addValidItem(uid="com.danielsh.alfred.scratch.%s" % name, arg="scratch \"%s\" \"%s\"" % (name, toScratch),
                                itemDict={"title": "Scratch to %s:" % name, "subtitle": toScratch})
            else:
                return

            print scratchFeedback