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
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
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
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']
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
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)
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"
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)
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)
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
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