kohpriwniranam

objectgo

Dec 30th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.08 KB | None | 0 0
  1. package oop
  2.  
  3. import (
  4.     "bufio"
  5.     "bytes"
  6.     b64 "encoding/base64"
  7.     "fmt"
  8.     "io"
  9.     "net/http"
  10.     "os"
  11.     "path/filepath"
  12. )
  13.  
  14. func (cl *Account) DownloadObjectMsg(msgid, tipe string) (string, error) {
  15.     hclient := &http.Client{}
  16.     req, _ := http.NewRequest("GET", "https://obs-sg.line-apps.com/talk/m/download.nhn?oid="+msgid, nil)
  17.     for k, v := range map[string]string{
  18.         "User-Agent":         cl.UserAgent,
  19.         "X-Line-Application": cl.LineApp,
  20.         "X-Line-Access":      cl.Authtoken,
  21.         "x-lal":              "en_US",
  22.         "x-lpv":              "1",
  23.     } {
  24.         req.Header.Set(k, v)
  25.     }
  26.     res, _ := hclient.Do(req)
  27.     defer res.Body.Close()
  28.     file, err := os.Create("/tmp/DL-" + msgid + "." + tipe)
  29.     if err != nil {
  30.         return "", err
  31.     }
  32.     io.Copy(file, res.Body)
  33.     file.Close()
  34.     return file.Name(), nil
  35. }
  36.  
  37. func (cl *Account) UpdateProfilePicture(path, tipe string) error {
  38.     fl, err := os.Open(path)
  39.     if err != nil {
  40.         return err
  41.     }
  42.     defer fl.Close()
  43.     of, err := fl.Stat()
  44.     if err != nil {
  45.         return err
  46.     }
  47.     var size int64 = of.Size()
  48.     bytess := make([]byte, size)
  49.     buffer := bufio.NewReader(fl)
  50.     _, err = buffer.Read(bytess)
  51.     if err != nil {
  52.         return err
  53.     }
  54.     dataa := ""
  55.     nama := filepath.Base(path)
  56.     if tipe == "vp" {
  57.         dataa = fmt.Sprintf(`{"name": "%s", "oid": "%s", "type": "image", "ver": "2.0", "cat": "vp.mp4"}`, nama, cl.Mid)
  58.     } else {
  59.         dataa = fmt.Sprintf(`{"name": "%s", "oid": "%s", "type": "image", "ver": "2.0"}`, nama, cl.Mid)
  60.     }
  61.     sDec := b64.StdEncoding.EncodeToString([]byte(dataa))
  62.     hclient := &http.Client{}
  63.     req, _ := http.NewRequest("POST", "https://obs-sg.line-apps.com/talk/p/upload.nhn", bytes.NewBuffer(bytess))
  64.     for k, v := range map[string]string{
  65.         "User-Agent":         cl.UserAgent,
  66.         "X-Line-Application": cl.LineApp,
  67.         "X-Line-Access":      cl.Authtoken,
  68.         "x-lal":              "en_US",
  69.         "x-lpv":              "1",
  70.     } {
  71.         req.Header.Set(k, v)
  72.     }
  73.     req.Header.Set("x-obs-params", string(sDec))
  74.     req.ContentLength = int64(len(bytess))
  75.     res, err := hclient.Do(req)
  76.     if err != nil {
  77.         return err
  78.     }
  79.     defer res.Body.Close()
  80.     return nil
  81. }
  82.  
  83. func (cl *Account) UpdateProfilePictureVideo(pict, vid string) error {
  84.     fl, err := os.Open(vid)
  85.     if err != nil {
  86.         return err
  87.     }
  88.     defer fl.Close()
  89.     of, err := fl.Stat()
  90.     if err != nil {
  91.         return err
  92.     }
  93.     var size int64 = of.Size()
  94.     bytess := make([]byte, size)
  95.     buffer := bufio.NewReader(fl)
  96.     _, err = buffer.Read(bytess)
  97.     if err != nil {
  98.         return err
  99.     }
  100.     dataa := fmt.Sprintf(`{"name": "%s", "oid": "%s", "ver": "2.0", "type": "video", "cat": "vp.mp4"}`, filepath.Base(vid), cl.Mid)
  101.     sDec := b64.StdEncoding.EncodeToString([]byte(dataa))
  102.     hclient := &http.Client{}
  103.     req, _ := http.NewRequest("POST", "https://obs-sg.line-apps.com/talk/vp/upload.nhn", bytes.NewBuffer(bytess))
  104.     for k, v := range map[string]string{
  105.         "User-Agent":         cl.UserAgent,
  106.         "X-Line-Application": cl.LineApp,
  107.         "X-Line-Access":      cl.Authtoken,
  108.         "x-lal":              "en_US",
  109.         "x-lpv":              "1",
  110.     } {
  111.         req.Header.Set(k, v)
  112.     }
  113.     req.Header.Set("x-obs-params", string(sDec))
  114.     req.ContentLength = int64(len(bytess))
  115.     res, err := hclient.Do(req)
  116.     if err != nil {
  117.         return err
  118.     }
  119.     defer res.Body.Close()
  120.     return cl.UpdateProfilePicture(pict, "vp")
  121. }
  122. //=====================================================================================//
  123. func (cl *Account) DownloadFileURL(url string) (string, error) {
  124.     req, _ := http.NewRequest("GET", url, nil)
  125.     y := &http.Client{}
  126.     res, err := y.Do(req)
  127.     if err != nil {
  128.         fmt.Println(err)
  129.         return "", err
  130.     }
  131.     defer res.Body.Close()
  132.     var tp string
  133.     if strings.Contains(res.Header.Get("Content-Type"), "image") {
  134.         tp = "jpg"
  135.     } else if strings.Contains(res.Header.Get("Content-Type"), "video") {
  136.         tp = "mp4"
  137.     } else if strings.Contains(res.Header.Get("Content-Type"), "audio") {
  138.         tp = "mp3"
  139.     } else {
  140.         tp = "bin"
  141.     }
  142.     tmpfile, err := ioutil.TempFile("/tmp", "DL-*."+tp)
  143.     if err != nil {
  144.         fmt.Println(err)
  145.         return "", err
  146.     }
  147.     defer tmpfile.Close()
  148.     if _, err := io.Copy(tmpfile, res.Body); err != nil {
  149.         fmt.Println(err)
  150.         return "", err
  151.     }
  152.     return tmpfile.Name(), nil
  153. }
  154.  
  155.  
  156. func (cl *Account) UploadObjHome(path, tipe, objId string) (string, error) {
  157.     chtoken := GetChannelInfo()
  158.     header := make(http.Header)
  159.     for k, v := range map[string]string{
  160.         "Content-Type":              "application/json; charset=UTF-8",
  161.         "User-Agent":                cl.UserAgent,
  162.         "X-Line-Mid":                myself,
  163.         "X-Line-Access":             cl.Authtoken,
  164.         "X-Line-Application":        cl.LineApp,
  165.         "X-Line-ChannelToken":       chtoken.ChannelAccessToken,
  166.         "x-lal":                     "en_US",
  167.         "x-lpv":                     "1",
  168.         "x-lsr":                     "JP",
  169.         "x-line-bdbtemplateversion": "v1",
  170.         "x-line-global-config":      "discover.enable=true; follow.enable=true",
  171.     } { header.Set(k, v) }
  172.     var ctype string
  173.     var endpoint string
  174.     if tipe == "image" {
  175.         ctype = "image/jpeg"
  176.         endpoint = "/r/myhome/c/"
  177.     } else {
  178.         ctype = "video/mp4"
  179.         endpoint = "/r/myhome/vc/"
  180.     }
  181.     if objId == "objid" {
  182.         hstr := fmt.Sprintf("Line_%d", time.Now().Unix())
  183.         objId = fmt.Sprintf("%x", md5.Sum([]byte(hstr)))
  184.     }
  185.     file, _ := os.Open(path)
  186.     fi, err := file.Stat()
  187.     if err != nil { return "", err }
  188.     for k, v := range map[string]string{
  189.         "x-obs-params": genObsParam(map[string]string{
  190.             "name":   fmt.Sprintf("%d", time.Now().Unix()),
  191.             "userid": myself,
  192.             "oid":    objId,
  193.             "type":   tipe,
  194.             "ver":    "1.0",
  195.         }),
  196.         "Content-Type":   ctype,
  197.         "Content-Length": fmt.Sprintf("%d", fi.Size()),
  198.     } { header.Set(k, v) }
  199.     _, err = req.Post("https://obs-sg.line-apps.com"+endpoint+objId, file, header)
  200.     if err != nil { return "", err }
  201.     return objId, nil
  202. }
  203.  
  204. func (cl *Account) UpdateProfilePicture(path, tipe string) error {
  205.     fl, err := os.Open(path)
  206.     if err != nil { return err }
  207.     defer fl.Close()
  208.     of, err := fl.Stat()
  209.     if err != nil { return err }
  210.     var size int64 = of.Size()
  211.     bytess := make([]byte, size)
  212.     buffer := bufio.NewReader(fl)
  213.     _, err = buffer.Read(bytess)
  214.     if err != nil { return err }
  215.     dataa := ""
  216.     nama := filepath.Base(path)
  217.     if tipe == "vp" {
  218.         dataa = fmt.Sprintf(`{"name": "%s", "oid": "%s", "type": "image", "ver": "2.0", "cat": "vp.mp4"}`, nama, myself)
  219.     } else {
  220.         dataa = fmt.Sprintf(`{"name": "%s", "oid": "%s", "type": "image", "ver": "2.0"}`, nama, myself)
  221.     }
  222.     sDec := b64.StdEncoding.EncodeToString([]byte(dataa))
  223.     hclient := &http.Client{}
  224.     req, _ := http.NewRequest("POST", "https://obs-sg.line-apps.com/talk/p/upload.nhn", bytes.NewBuffer(bytess))
  225.     for k, v := range map[string]string{
  226.         "User-Agent":         cl.UserAgent,
  227.         "X-Line-Application": cl.LineApp,
  228.         "X-Line-Access":      cl.Authtoken,
  229.         "x-lal":              "en_US",
  230.         "x-lpv":              "1",
  231.     } { req.Header.Set(k, v) }
  232.     req.Header.Set("x-obs-params", string(sDec))
  233.     req.ContentLength = int64(len(bytess))
  234.     res, err := hclient.Do(req)
  235.     if err != nil { return err }
  236.     defer res.Body.Close()
  237.     return nil
  238. }
  239.  
  240. func (cl *Account) UpdateProfilePictureVideo(pict, vid string) error {
  241.     fl, err := os.Open(vid)
  242.     if err != nil { return err }
  243.     defer fl.Close()
  244.     of, err := fl.Stat()
  245.     if err != nil { return err }
  246.     var size int64 = of.Size()
  247.     bytess := make([]byte, size)
  248.     buffer := bufio.NewReader(fl)
  249.     _, err = buffer.Read(bytess)
  250.     if err != nil { return err }
  251.     dataa := fmt.Sprintf(`{"name": "%s", "oid": "%s", "ver": "2.0", "type": "video", "cat": "vp.mp4"}`, filepath.Base(vid), myself)
  252.     sDec := b64.StdEncoding.EncodeToString([]byte(dataa))
  253.     hclient := &http.Client{}
  254.     req, _ := http.NewRequest("POST", "https://obs-sg.line-apps.com/talk/vp/upload.nhn", bytes.NewBuffer(bytess))
  255.     for k, v := range map[string]string{
  256.         "User-Agent":         cl.UserAgent,
  257.         "X-Line-Application": cl.LineApp,
  258.         "X-Line-Access":      cl.Authtoken,
  259.         "x-lal":              "en_US",
  260.         "x-lpv":              "1",
  261.     } { req.Header.Set(k, v) }
  262.     req.Header.Set("x-obs-params", string(sDec))
  263.     req.ContentLength = int64(len(bytess))
  264.     res, err := hclient.Do(req)
  265.     if err != nil { return err }
  266.     defer res.Body.Close()
  267.     return UpdateProfilePicture(pict, "vp")
  268. }
  269.  
  270. func (cl *Account) UpdateProfileCoverById(objId string, coverVideo bool) error {
  271.     chtoken := GetChannelInfo()
  272.     header := make(http.Header)
  273.     for k, v := range map[string]string{
  274.         "Content-Type":              "application/json; charset=UTF-8",
  275.         "User-Agent":                cl.UserAgent,
  276.         "X-Line-Mid":                myself,
  277.         "X-Line-Access":             cl.Authtoken,
  278.         "X-Line-Application":        cl.LineApp,
  279.         "X-Line-ChannelToken":       chtoken.ChannelAccessToken,
  280.         "x-lal":                     "en_US",
  281.         "x-lpv":                     "1",
  282.         "x-lsr":                     "JP",
  283.         "x-line-bdbtemplateversion": "v1",
  284.         "x-line-global-config":      "discover.enable=true; follow.enable=true",
  285.     } { header.Set(k, v) }
  286.     data := map[string]string{
  287.         "homeId":        myself,
  288.         "coverObjectId": objId,
  289.         "storyShare":    "false",
  290.     }
  291.     if coverVideo == true { data["videoCoverObjectId"] = objId }
  292.     _, err := req.Post(connect.LINE_HOST_DOMAIN+"/hm/api/v1/home/cover.json", header, req.BodyJSON(data))
  293.     return err
  294. }
  295.  
  296. func (cl *Account) ChangeProfilePicture(to string, msgid string) {
  297.     path, _ := DownloadObjectMsg(msgid, "bin")
  298.     if _, err := os.Stat(path); os.IsNotExist(err) {
  299.         SendMessage(to, "Update profile error.")
  300.         return
  301.     }
  302.     UpdateProfilePicture(path, "p")
  303.     SendMessage(to, "Success update profile picture.")
  304. }
  305.  
  306. func (cl *Account) ChangeProfileVideo(to string, msgid string) {
  307.     prof := GetProfile()
  308.     path_p, _ := DownloadFileURL("https://obs.line-scdn.net/" + prof.PictureStatus)
  309.     if _, err := os.Stat(path_p); os.IsNotExist(err) {
  310.         SendMessage(to, "Update profile error.")
  311.         return
  312.     }
  313.     path, _ := DownloadObjectMsg(msgid, "bin")
  314.     if _, err := os.Stat(path); os.IsNotExist(err) {
  315.         SendMessage(to, "Update profile error.")
  316.         return
  317.     }
  318.     _ = UpdateProfilePictureVideo(path_p, path)
  319.     SendMessage(to, "Success update profile video.")
  320. }
  321.  
  322. func (cl *Account) ChangeCoverPicture(to string, msgid string) {
  323.     path, _ := DownloadObjectMsg(msgid, "bin")
  324.     if _, err := os.Stat(path); os.IsNotExist(err) {
  325.         SendMessage(to, "Update cover error.")
  326.         return
  327.     }
  328.     oid, err := UploadObjHome(path, "image", "objid")
  329.     if err != nil {
  330.         fmt.Println(err)
  331.         return
  332.     }
  333.     _ = UpdateProfileCoverById(oid, false)
  334.     SendMessage(to, "Success update cover.")
  335. }
  336.  
  337. func (cl *Account) ChangeCoverVideo(to string, msgid string) {
  338.     prof, _ := GetProfileDetail(myself)
  339.     path_p, _ := DownloadFileURL("https://obs.line-scdn.net/myhome/c/download.nhn?userid=" + myself + "&oid=" + prof.Result.CoverObsInfo.ObjectId)
  340.     if _, err := os.Stat(path_p); os.IsNotExist(err) {
  341.         SendMessage(to, "Update cover error.")
  342.         return
  343.     }
  344.     path, _ := DownloadObjectMsg(msgid, "bin")
  345.     if _, err := os.Stat(path); os.IsNotExist(err) {
  346.         SendMessage(to, "Update cover error.")
  347.         return
  348.     }
  349.     oid, err := UploadObjHome(path_p, "image", "objid")
  350.     if err != nil {
  351.         fmt.Println(err)
  352.         return
  353.     }
  354.     void, err := UploadObjHome(path, "video", oid)
  355.     if err != nil {
  356.         fmt.Println(err)
  357.         return
  358.     }
  359.     _ = UpdateProfileCoverById(void, true)
  360.     SendMessage(to, "Success update cover video.")
  361. }
Add Comment
Please, Sign In to add comment