Skip to content
This repository has been archived by the owner on Aug 25, 2023. It is now read-only.

Added breaking code for Uploading video #234

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions media.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
neturl "net/url"
Expand Down Expand Up @@ -988,3 +989,82 @@ func (insta *Instagram) UploadPhoto(photo io.Reader, photoCaption string, qualit

return uploadResult.Media, nil
}

// UploadVideo post image from io.Reader to instagram.
func (insta *Instagram) UploadVideo(video io.Reader, photoCaption string, quality int, filterType int) (Item, error) {
out := Item{}

uploadID := time.Now().Unix()

var b bytes.Buffer
w := multipart.NewWriter(&b)

w.WriteField("upload_id", strconv.FormatInt(uploadID, 10))
w.WriteField("_uuid", insta.uuid)
w.WriteField("_csrftoken", insta.token)
w.WriteField("media_type", "2")

if err := w.Close(); err != nil {
return out, err
}
req, err := http.NewRequest("POST", goInstaAPIUrl+"upload/video/", &b)
if err != nil {
return out, err
}
req.Header.Set("X-IG-Capabilities", "3Q4=")
req.Header.Set("X-IG-Connection-Type", "WIFI")
req.Header.Set("Host", "i.instagram.com")
req.Header.Set("Cookie2", "$Version=1")
req.Header.Set("Accept-Language", "en-US")
req.Header.Set("Accept-Encoding", "gzip, deflate")
req.Header.Set("Content-type", w.FormDataContentType())
req.Header.Set("Connection", "keep-alive")
req.Header.Set("User-Agent", goInstaUserAgent)

resp, err := insta.c.Do(req)
if err != nil {
return out, err
}
defer resp.Body.Close()
fmt.Println("Status: ", resp.Status)

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return out, err
}

if resp.StatusCode != 200 {
return out, fmt.Errorf("invalid status code, result: %s", resp.Status)
}

var result struct {
UploadURL string `json:"video_upload_urls"`
Status string
}

fmt.Println("[response]", string(body))

err = json.Unmarshal(body, &result)
if err != nil {
log.Println("[unmarshal]", err.Error())
return out, err
}

fmt.Println("HERE: ", result)

var uploadResult struct {
Media Item `json:"media"`
UploadID string `json:"upload_id"`
Status string `json:"status"`
}
// err = json.Unmarshal(body, &uploadResult)
// if err != nil {
// return out, err
// }

// if uploadResult.Status != "ok" {
// return out, fmt.Errorf("invalid status, result: %s", resp.Status)
// }

return uploadResult.Media, nil
}