Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

76 lines
1.8KB

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. "os"
  11. "strconv"
  12. "time"
  13. )
  14. func saveURL(url string) (tmpFile string, contentType string, err error) {
  15. log.Println("saveURL: " + url)
  16. var myClient = &http.Client{Timeout: 20 * time.Second}
  17. r, err := myClient.Get(url)
  18. if err != nil {
  19. log.Fatal("Fail to get URL:" + url)
  20. log.Fatal(err)
  21. return "", "", err
  22. }
  23. defer r.Body.Close()
  24. contentType = r.Header.Get("Content-Type")
  25. contentLen := r.Header.Get("Content-Length")
  26. len, _ := strconv.Atoi(contentLen)
  27. log.Println(r)
  28. file, err := ioutil.TempFile(os.TempDir(), "wechat_hitxy_")
  29. // Use io.Copy to just dump the response body to the file. This supports huge files
  30. _, err = io.Copy(file, r.Body)
  31. if err != nil {
  32. log.Println(err)
  33. return "", contentType, err
  34. }
  35. tmpFile = file.Name()
  36. file.Close()
  37. //see if its a video url
  38. if len < 4096 && contentType == "text/plain" {
  39. u := readVideoURL(tmpFile)
  40. if u != "" {
  41. fmt.Println("saveing video url: " + u)
  42. os.Remove(tmpFile) //remove json file
  43. tmpFile, contentType, err = saveURL(u)
  44. }
  45. }
  46. return
  47. }
  48. //{"video_url":"http://153.37.232.145/vweixinp.tc.qq.com/1007_6475d21fb443453b8adeac7e59cc0e1c.f10.mp4?vkey=E79C6B0DA06E7A434D15E24774F91412386D1956768C400AC93ECA5320ACAAAF050E1E1BA5C22DFD81B5EE3FBA97E928E0FC2DC597CF611B3E6641BC1AEE2892736FFE29E993F200AA4A0811FEB4E234C48516131207DDE4&sha=0&save=1"}
  49. type videoURL struct {
  50. VideoURL string `json:"video_url"`
  51. }
  52. //readVideoURL try to read a file into json structure
  53. //containing video_url
  54. //
  55. func readVideoURL(path string) (u string) {
  56. body, err := ioutil.ReadFile(path)
  57. if err == nil {
  58. var v = videoURL{}
  59. err = json.Unmarshal([]byte(body), &v)
  60. if err == nil {
  61. _, err = url.ParseRequestURI(v.VideoURL)
  62. if err == nil {
  63. return v.VideoURL
  64. }
  65. }
  66. }
  67. return ""
  68. }