benjamin74 Posted October 16, 2015 Posted October 16, 2015 Hello, I love the "Web Search" functions but I'm really missing a simple way to "manipulate" the {query} string parameter... e.g.: lots of my "Web Search" are based on a URL, so my {query} parameter is something like this "http://www.alfredforum.com/index.php"... but my "Web search" (i.e. the service I'm using) only needs : - the URL without http://www. in front of it OR - the root domain - ...etc Unfortunately there is no way to do basic string manipulation with the "Web Search" functionality... so I have to manually delete the "http://www."everytime which is time consuming and defeats the purpose of Alfred... Could you add such a function ?? Thanks, Cheers,
deanishe Posted October 16, 2015 Posted October 16, 2015 (edited) You can do this with a workflow easily enough. Keyword -> Run Script -> Open URL. URLs can be manipulated much more powerfully in Python or Ruby than via some additional options in the Web Search dialog. Here are a few examples in Python: from urlparse import urlsplit, urlunsplit url = "{query}" parsed = urlsplit(url) # Domain print(parsed.netloc) # Without scheme:// print(urlunsplit(('',) + parsed[1:]).lstrip('/')) # Hostname print(parsed.hostname) # Resolve URL redirects / Expand shortened URLs import urllib2 print(urllib2.urlopen(url).geturl()) Edited October 16, 2015 by deanishe Prashant Dwivedi 1
benjamin74 Posted October 25, 2015 Author Posted October 25, 2015 And how would a simple Python manipulation looks like in the case of : Keyword -> Run Script -> Open URL By that I mean how is the {query} string manipulated and transfered from the Run Script to the Open URL ? Cheers,
deanishe Posted October 26, 2015 Posted October 26, 2015 (edited) You put url = "{query}" at the top of your script, and print the altered URL. This script takes the URL the user entered and expands any shortened URLs. from urlparse import urlsplit, urlunsplit from urllib2 import urlopen url = "{query}" # Expand short URL/resolve redirects print(urlopen(url).geturl()) Edited October 26, 2015 by deanishe
benjamin74 Posted October 26, 2015 Author Posted October 26, 2015 Thanks, but somehow I still can't connect the dots... I would have expectected to be able to "pass" the manipulated string to the next block "Open URL", but that doesn't seems possible : http://screencast.com/t/uKPwhljiwkxP It's so basic it's driving me crazy not to have this in the standard doc (well if it is, I haven't found it, AlfredApps example workflows are lame lame lame... and don't help in anyway). Any idea ? Thanks, Cheers,
deanishe Posted October 26, 2015 Posted October 26, 2015 From a Run Script action, any output to STDOUT is sent to the next action as {query}. That means, as demonstrated above, what you print or echo in your script becomes {query} for the next action. In the case of Script Filters, the arg parameter of their results becomes the {query} of the following action.
benjamin74 Posted October 26, 2015 Author Posted October 26, 2015 So it's sent to the next action without actually having to connect the "script" box with the "open URL" Box ?? I still can't get this to work. http://screencast.com/t/pCXg1dsDy I'm using this as script: from urlparse import urlsplit, urlunspliturl = "{query}"parsed = urlsplit(url)# Hostnameprint(parsed.hostname) in an attempt to the OpenURL with the hostname instead of the long URL but it doesn't seem to work. Another tip ? Thanks !
deanishe Posted October 26, 2015 Posted October 26, 2015 You still have to connect the actions together in Alfred. How would Alfred know where to send the output otherwise? I'm not sure if a hostname alone will be enough. You'll probably need to put an http:// in there, too.
benjamin74 Posted October 27, 2015 Author Posted October 27, 2015 Yes that's what i TRIED to do... but this bloody Alfred doesn't let me connect script with openURL !!!
deanishe Posted October 27, 2015 Posted October 27, 2015 You have to use Actions > Run Script, not Outputs > Run Script.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now