在MAC下快速生成短地址(更新调用新浪短地址接口方法)

记得几个月以前,在某个视频里看到过一种快速生成shorten url的方法。大概就是在备忘录里面扫一下网址,然后右键按个选项,内容就自动替换成了短地址。看完之后觉得很神奇,因为在很多地方短地址比完整地址更为方便(具体不表!)。一开始以为是MAS里面的一款软件,但是各种搜索过后还是没找出来,最后就放弃了。

最近在脑洞里出现了几个无聊的想法,竟然在Automator的帮助下都顺利完成了,于是觉得shorten url也有戏。Google上面的关键词,最近几条记录都是10年前后的,看来是姿势不对。但是换了几个词后发现结果还是这些,看来我这个想法老外们都不感兴趣。只能死马当活马医,看看老外们在Snow Leopard下是怎么实现的。

把第一页的几条都看了一遍,方法都大致相同,最后选择了看似是原作者的论坛地址进行研究(http://is.gd/cvQssb)。作者用的就是两大杀器——AppleScript和Automator,再借助系统自带的"URL Access Scripting",具体方法如下:

1.在Automator中新建一个服务,“‘服务’收到选定”选择“URL”,后面是位于“任何应用程序”,下面默认就好。

QQ20140425-1@2x

2.在左边的“操作”找到“运行AppleScript”,拖到右边空白地方,在文本框中输入下面的代码:

on run {input, parameters}
  set dlstring to ((path to temporary items folder as string) & "shortURL.html")
  tell application "URL Access Scripting"
    download ("http://bit.ly/api?url=" & (item 1 of the input)) to dlstring replacing yes
  end tell
  set x to open for access dlstring
  set aurl to read x
  close access x
  return aurl
end run
  1. Command+S保存这个服务,名字就叫“Shorten URL”。

4.在系统任意地方扫一下URL,点右键服务中的“Shorten URL”,即可生成短地址。

作者表示在10.6下是测试通过的,但我在自己的Mavericks下却报错,提示没有“URL Access Scripting”这个App。继续Google之,原来这个App在10.7 Lion就被官方“下架”了,原因不明。看来这个方法不靠谱呀。回到原来的搜索列表向后翻几页,貌似找到了另外一段AppleScript(地址:http://is.gd/ZNWOz7)。这篇文章的步骤与上面基本一致,唯一不同就是AppleScript没有使用“URL Access Scripting”,而是采用了curl:

on run {input}
    set inputResult to (input as string)
    ignoring case
        if (((characters 1 thru 4 of inputResult) as string) is not equal to "http") then
            display dialog "Invalid URL"
        else
            set curlCMD to "curl --stderr /dev/null \"http://bit.ly/api?url=" & input & "\""
            set tinyURL to (do shell script curlCMD)
            return tinyURL
        end if
    end ignoring
end run

在本地跑了一下,发现没报错了,但是不能生成短地址。究其原因是代码中使用的bit.ly这个网站关闭了。好吧找个小三,就“is.gd”好了。在“is.gd”的API文档中,介绍了短地址生成网址为:

http://is.gd/create.php?format=simple&url=www.example.com

于是把上面的网址替换掉原本代码中的bit.ly,终于成功生成了短地址!

目标算是实现了,但感觉这个过程略麻烦,能不能直接替换掉原来的完整地址呢?方法还是有的,下面是完整的配置过程:

1.在Automator中新建一个服务,打开后按照下图进行配置。

QQ20140425-2@2x

2.在左边的“操作”找到“运行AppleScript”,拖到右边空白地方,在文本框中输入下面的代码:

on run {input}
    set inputResult to (input as string)
    ignoring case
        if (((characters 1 thru 4 of inputResult) as string) is not equal to "http") then
            display dialog "Invalid URL"
        else
            set curlCMD to "curl --stderr /dev/null \"http://is.gd/create.php?format=simple&url=" & input & "\""
            set tinyURL to (do shell script curlCMD)
            return tinyURL
        end if
    end ignoring
end run
  1. Command+S保存这个服务,名字就叫“Shorten URL”。

4.打开“系统偏好设置”--“键盘”--“快捷键”,左边点击“服务”,然后在右边找到“Shorten URL”(这里是第三步起的名字),点击“添加快捷键”,设定一个喜欢的快捷键(我是Command+Shift+K)。

5.找一段url,扫一下然后同时按下Command+Shift+K,等待2~3s短地址就出来了!

当然啦,可以把is.gd换成任意的短地址生成网站,注意把AppleScript里面的API URL修改一下就好了。

后记:

为神马就不尝试一下用新浪的短地址接口呢~

首先查找API文档,把官方的接口弄出来:

https://api.weibo.com/2/short_url/shorten.json

需要的参数有url_long和access_token,虽然token不是必须,但我测试后发现不带token不能调用。(access_token说明

这里遇到最大的问题是,接口返回的不是单纯短地址,而是一串包含短地址的json格式字符串,比如说访问

https://api.weibo.com/2/short_url/shorten.json?access_token=&url_long=http://www.baidu.com

那么返回的内容如下:

{"urls":[
{"object_type":"","result":true,"url_short":"http://t.cn/h5mwx","object_id":"","url_long":"http://www.baidu.com","type":0}
]}

而AppleScript本身是不支持json解析的,需要借助第三方软件才行。

在Google的帮助下,发现MAS中有一款专门为AppleScript解析json而设计的软件 “JSON Helper for AppleScript” MAS地址:http://t.cn/8s8HFWG 官网例子:http://t.cn/8s8HU1g

装上后软件默认在后台运行,直接在AppleScript中调用就好了。在n次尝试后终于让我摸索到正确的用法,下面是完整的AS代码:

on run {input}
    set inputResult to (input as string)
    ignoring case
        if (((characters 1 thru 4 of inputResult) as string) is not equal to "http") then
            display dialog "Invalid URL"
        else
            tell application "JSON Helper"
                set token to ""
                set result to fetch JSON from "https://api.weibo.com/2/short_url/shorten.json?access_token=" & token & "&url_long=" & input
                set tinyURL to url_short of item 1 of urls of result as string
            end tell
            display dialog "Success!"
            return tinyURL
        end if
    end ignoring
end run

运行前记得填写代码中的token值。

官网说测试用户限制是150次/小时,普通应用2000次/小时,怎么也应该够用了~

« 返回