在Go网络编程中使用外部API——基于 Google API 创建URL地址缩短服务
在本文中,我们将看看如何使用一个来自Go以外的API创建应用,我们将使用Google提供的URL缩短服务API来创建URL地址的缩短版本,你可以在http://goo.gl/体验一把,比如你现在可以通过http://goo.gl/FE6F2 这个地址来访问本文,goo.gl 还会生成一个你的网址的二维码,比如本文的二维码是:
这样的服务是很有用的,比如本文的网址,你应该也看到了,不管是让你记下来或者是让你写下来都太难了,但是缩短之后不管怎么样都简单得多,这么好的服务,Google以API的形式给大家免费使用,你可以在https://developers.google.com/url-shortener/ 了解更多有关该API的信息。
我们要写的程序十分的很简单,同时,我还想在写了这个小程序之后再将它发布到 Google的AppEngine上面去,不过这都是后话了,整个程序需要用到的知识就下面这么几个:
第一步 确定已经正确的创建了开发环境
很简单:
cox@Cox:~/websites$ mkdir urlshortener
cox@Cox:~/websites$ cd urlshortener/
cox@Cox:~/websites/urlshortener$ export GOPATH=$(pwd)
cox@Cox:~/websites/urlshortener$ export PATH=$GOPATH/bin:$PATH
cox@Cox:~/websites/urlshortener$ mkdir pkg bin src第二步 安装APIs
执行下面命令:
go get code.google.com/p/google-api-go-client/urlshortener/v1第三步 在我们的代码中导入该API
上面安装的API可以通过下面这样导入到我们的项目中来了:
import "code.google.com/p/google-api-go-client/urlshortener/v1"完成其它的代码
我的整个代码如下:
package main
import (
"fmt"
"net/http"
"text/template"
"code.google.com/p/google-api-go-client/urlshortener/v1"
)
// 本项目的网页模板
var tmpl = template.Must(template.New("URL Shortener Template").Parse(`
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><title>Goo.gl网址缩短服务</title>
<style>
input, button { border: .1em solid #ccc; border-radius: .3em; padding: .5em; }
button { background-color: #f0f0f0; }
button:hover { background-color: #ccc;}
</style>
</head>
<body>
<h1>Goo.gl网址缩短服务</h1>
{{if .}}{{.}}<br /><hr /><br />{{end}}
<form action="/shorten" type="POST">
<label for="long-url">长网址:</label><input type="text" name="url" id="long-url" placeholder="请在这里输入您要缩短的网址" /><button><span>给我短址</span></button>
</form>
<br /><hr /><br />
<form action="/lengthen" type="POST">
<label for="short-url">短网址:</label><input type="text" name="url" id="short-url" placeholder="请在这里输入您要获取原始网址的短网址" /><button><span>给我长址</span></button>
</form></body></html>
`))
func handleRoot(w http.ResponseWriter, r *http.Request) {
tmpl.Execute(w, nil)
}
func handleShorten(w http.ResponseWriter, r *http.Request) {
url := r.FormValue("url") // 获取由网页提交的网址
svc, _ := urlshortener.New(http.DefaultClient) // 使用http中的default client创建一个新的 urlshortener 实例
shorturl, _ := svc.Url.Insert(&urlshortener.Url { LongUrl: url, }).Do() // 填充长的网址然后呼叫缩短服务
tmpl.Execute(w, fmt.Sprintf("<h2 class="url"><a href="%s">%s</a></h2><h3 class="url">源始长网址为:<em>%s</em></h3>", shorturl.Id, shorturl.Id, url))
}
func handleLengthen(w http.ResponseWriter, r *http.Request) {
url := "http://goo.go/" + r.FormValue("url")
svc, _ := urlshortener.New(http.DefaultClient)
longurl, err := svc.Url.Get(url).Do()
if err != nil {
fmt.Println("error: %v", err)
return
}
tmpl.Execute(w, fmt.Sprintf("<h2 class="url"><a href="%s">%s</a></h2><h3 class="url">短网址为:<em>%s</em></h3>", url, url, longurl))
}
func main() {
http.HandleFunc("/", handleRoot)
http.HandleFunc("/shorten", handleShorten)
http.HandleFunc("/lengthen", handleLengthen)
http.ListenAndServe(":8001", nil)
}运行该程序之后您即可以打开浏览器,并访问:
评论已关闭