|
|
|
@@ -1,11 +1,14 @@ |
|
|
|
package main |
|
|
|
|
|
|
|
import ( |
|
|
|
"encoding/json" |
|
|
|
"io" |
|
|
|
"io/ioutil" |
|
|
|
"log" |
|
|
|
"net/http" |
|
|
|
"net/url" |
|
|
|
"os" |
|
|
|
"strconv" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
@@ -18,13 +21,70 @@ func saveURL(url string) (tmpFile string, contentType string, err error) { |
|
|
|
return "", "", err |
|
|
|
} |
|
|
|
defer r.Body.Close() |
|
|
|
|
|
|
|
contentType = r.Header.Get("Content-Type") |
|
|
|
contentLen := r.Header.Get("Content-Length") |
|
|
|
len, _ := strconv.Atoi(contentLen) |
|
|
|
|
|
|
|
file, err := ioutil.TempFile(os.TempDir(), "wechat_hitxy_") |
|
|
|
// Use io.Copy to just dump the response body to the file. This supports huge files |
|
|
|
_, err = io.Copy(file, r.Body) |
|
|
|
if err != nil { |
|
|
|
log.Fatal(err) |
|
|
|
return "", contentType, err |
|
|
|
} |
|
|
|
tmpFile = file.Name() |
|
|
|
file.Close() |
|
|
|
|
|
|
|
//see if its a video url |
|
|
|
if len < 4096 && contentType == "text/plain" { |
|
|
|
u := readVideoURL(tmpFile) |
|
|
|
if u != "" { |
|
|
|
os.Remove(tmpFile) //remove json file |
|
|
|
tmpFile, contentType, err = saveVideo(u) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
func contentType2MediaType(contentType string) (mediaType string) { |
|
|
|
switch contentType { |
|
|
|
case "image/jpeg": |
|
|
|
mediaType = "image" |
|
|
|
case "text/plain": |
|
|
|
mediaType = "json" |
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
//{"video_url":"http://153.37.232.145/vweixinp.tc.qq.com/1007_6475d21fb443453b8adeac7e59cc0e1c.f10.mp4?vkey=E79C6B0DA06E7A434D15E24774F91412386D1956768C400AC93ECA5320ACAAAF050E1E1BA5C22DFD81B5EE3FBA97E928E0FC2DC597CF611B3E6641BC1AEE2892736FFE29E993F200AA4A0811FEB4E234C48516131207DDE4&sha=0&save=1"} |
|
|
|
type videoURL struct { |
|
|
|
VideoURL string `json:"video_url"` |
|
|
|
} |
|
|
|
|
|
|
|
//readVideoURL try to read a file into json structure |
|
|
|
//containing video_url |
|
|
|
// |
|
|
|
func readVideoURL(path string) (u string) { |
|
|
|
body, err := ioutil.ReadFile(path) |
|
|
|
if err == nil { |
|
|
|
var v = videoURL{} |
|
|
|
err = json.Unmarshal([]byte(body), &v) |
|
|
|
if err == nil { |
|
|
|
_, err = url.ParseRequestURI(v.VideoURL) |
|
|
|
if err == nil { |
|
|
|
|
|
|
|
return v.VideoURL |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return "" |
|
|
|
} |
|
|
|
|
|
|
|
func saveVideo(path string) (tmpFile string, contentType string, err error) { |
|
|
|
u := readVideoURL(path) |
|
|
|
if u != "" { |
|
|
|
tmpFile, contentType, err = saveURL(u) |
|
|
|
} |
|
|
|
return |
|
|
|
} |