func (v Video) GetAlbums(params VideoGetAlbumsParams) (VideoGetAlbumsResponse, error) {
	r, err := v.API.Request("video.getAlbums", params)
	if err != nil {
		return nil, err
	}
	var resp VideoGetAlbumsResponse
	if params.Extended {
		var tmp VideoGetAlbumsResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp VideoGetAlbumsResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
GetAlbums Returns a list of video albums owned by a user or community.
package vkapi
import (
	"encoding/json"
	"strconv"
	"github.com/stek29/vk"
)
type Video struct {
	API vk.API
}
type VideoGetParams struct {
	OwnerID int `url:"owner_id,omitempty"`
	Videos CSVStringSlice `url:"videos,omitempty"`
	AlbumID int `url:"album_id,omitempty"`
	Count int `url:"count,omitempty"`
	Offset int `url:"offset,omitempty"`
	Extended bool `url:"extended,omitempty"`
}
type VideoGetResponse interface {
	isVideoGet()
}
type VideoGetResponseNormal struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Video `json:"items,omitempty"`
}
func (VideoGetResponseNormal) isVideoGet() {}
type VideoGetResponseExtended struct {
	Count    int        `json:"count,omitempty"`
	Items    []vk.Video `json:"items,omitempty"`
	Profiles []vk.User  `json:"profiles,omitempty"`
	Groups   []vk.Group `json:"groups,omitempty"`
}
func (VideoGetResponseExtended) isVideoGet() {}
func (v Video) Get(params VideoGetParams) (VideoGetResponse, error) {
	r, err := v.API.Request("video.get", params)
	if err != nil {
		return nil, err
	}
	var resp VideoGetResponse
	if params.Extended {
		var tmp VideoGetResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp VideoGetResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type VideoEditParams struct {
	OwnerID int `url:"owner_id,omitempty"`
	VideoID int `url:"video_id"`
	Name string `url:"name,omitempty"`
	Desc string `url:"desc,omitempty"`
	PrivacyView CSVStringSlice `url:"privacy_view,omitempty"`
	PrivacyComment CSVStringSlice `url:"privacy_comment,omitempty"`
	NoComments bool `url:"no_comments,omitempty"`
	Repeat bool `url:"repeat,omitempty"`
}
func (v Video) Edit(params VideoEditParams) (bool, error) {
	r, err := v.API.Request("video.edit", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type VideoAddParams struct {
	TargetID int `url:"target_id,omitempty"`
	VideoID int `url:"video_id"`
	OwnerID int `url:"owner_id"`
}
func (v Video) Add(params VideoAddParams) (bool, error) {
	r, err := v.API.Request("video.add", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type VideoSaveParams struct {
	Name string `url:"name,omitempty"`
	Description string `url:"description,omitempty"`
	IsPrivate bool `url:"is_private,omitempty"`
	Wallpost bool `url:"wallpost,omitempty"`
	Link string `url:"link,omitempty"`
	GroupID int `url:"group_id,omitempty"`
	AlbumID        int            `url:"album_id,omitempty"`
	PrivacyView    CSVStringSlice `url:"privacy_view,omitempty"`
	PrivacyComment CSVStringSlice `url:"privacy_comment,omitempty"`
	NoComments     bool           `url:"no_comments,omitempty"`
	Repeat      bool `url:"repeat,omitempty"`
	Compression bool `url:"compression,omitempty"`
}
type VideoSaveResponse struct {
	UploadURL string `json:"upload_url,omitempty"`
	VideoID int `json:"video_id,omitempty"`
	OwnerID int `json:"owner_id,omitempty"`
	Title string `json:"title,omitempty"`
	Description string `json:"description,omitempty"`
}
func (v Video) Save(params VideoSaveParams) (*VideoSaveResponse, error) {
	r, err := v.API.Request("video.save", params)
	if err != nil {
		return nil, err
	}
	var resp VideoSaveResponse
	err = json.Unmarshal(r, &resp)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}
type VideoDeleteParams struct {
	VideoID int `url:"video_id"`
	OwnerID  int `url:"owner_id,omitempty"`
	TargetID int `url:"target_id,omitempty"`
}
func (v Video) Delete(params VideoDeleteParams) (bool, error) {
	r, err := v.API.Request("video.delete", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type VideoRestoreParams struct {
	VideoID int `url:"video_id"`
	OwnerID int `url:"owner_id,omitempty"`
}
func (v Video) Restore(params VideoRestoreParams) (bool, error) {
	r, err := v.API.Request("video.restore", params)
	if err != nil {
		return false, err
	}
	return decodeBoolIntResponse(r)
}
type VideoSearchParams struct {
	Q string `url:"q"`
	Sort int `url:"sort,omitempty"`
	Hd int `url:"hd,omitempty"`
	Adult bool `url:"adult,omitempty"`
	Filters   CSVStringSlice `url:"filters,omitempty"`
	SearchOwn bool           `url:"search_own,omitempty"`
	Offset  int `url:"offset,omitempty"`
	Longer  int `url:"longer,omitempty"`
	Shorter int `url:"shorter,omitempty"`
	Count    int  `url:"count,omitempty"`
	Extended bool `url:"extended,omitempty"`
}
type VideoSearchResponse interface {
	isVideoSearch()
}
type VideoSearchResponseNormal struct {
	Count int        `json:"count,omitempty"`
	Items []vk.Video `json:"items,omitempty"`
}
func (VideoSearchResponseNormal) isVideoSearch() {}
type VideoSearchResponseExtended struct {
	Count    int        `json:"count,omitempty"`
	Items    []vk.Video `json:"items,omitempty"`
	Profiles []vk.User  `json:"profiles,omitempty"`
	Groups   []vk.Group `json:"groups,omitempty"`
}
func (VideoSearchResponseExtended) isVideoSearch() {}
func (v Video) Search(params VideoSearchParams) (VideoSearchResponse, error) {
	r, err := v.API.Request("video.search", params)
	if err != nil {
		return nil, err
	}
	var resp VideoSearchResponse
	if params.Extended {
		var tmp VideoSearchResponseExtended
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	} else {
		var tmp VideoSearchResponseNormal
		err = json.Unmarshal(r, &tmp)
		resp = &tmp
	}
	if err != nil {
		return nil, err
	}
	return resp, nil
}
type VideoGetAlbumsParams struct {
	OwnerID int `url:"owner_id,omitempty"`
	Offset int `url:"offset,omitempty"`
	Count int `url:"count,omitempty"`
	Extended   bool `url:"extended,omitempty"`
	NeedSystem bool `url:"need_system,omitempty"`
}
type VideoGetAlbumsResponse interface {
	isVideoGetAlbums()
}
type VideoGetAlbumsResponseNormal struct {
	Count int `json:"count,omitempty"`
	Items []genTODOType  `json:"items,omitempty"`
}
func (VideoGetAlbumsResponseNormal) isVideoGetAlbums() {}
type VideoGetAlbumsResponseExtended struct {
	Count int `json:"count,omitempty"`
	Items []genTODOType  `json:"items,omitempty"`
}
func (VideoGetAlbumsResponseExtended) isVideoGetAlbums() {}