Documentation
¶
Overview ¶
Package weibo 新浪微博 SDK
Example (LoginWithCrackFunc) ¶
注册验证码破解函数示例
package main
import (
"fmt"
"log"
"os"
"github.com/axiaoxin-com/chaojiying"
"github.com/axiaoxin-com/weibo"
)
func main() {
// 登录遇到验证码时
// 如果有注册你自己的破解函数则会尝试使用你注册的函数进行验证码破解
// 破解失败则采用默认的人工手动处理的方式手工输入保存在临时目录中的weibo_pin.png中的验证码
// 从环境变量获取必须的账号信息
appkey := os.Getenv("weibo_app_key")
appsecret := os.Getenv("weibo_app_secret")
username := os.Getenv("weibo_username")
passwd := os.Getenv("weibo_passwd")
redirecturi := os.Getenv("weibo_redirect_uri")
securitydomain := os.Getenv("weibo_security_domain")
// 初始化客户端
weibo := weibo.New(appkey, appsecret, username, passwd, redirecturi)
// 使用超级鹰破解验证码
// 初始化超级鹰客户端
chaojiyingUser := os.Getenv("chaojiying_user")
chaojiyingPass := os.Getenv("chaojiying_pass")
chaojiyingAccount := chaojiying.Account{User: chaojiyingUser, Pass: chaojiyingPass}
cracker, err := chaojiying.New([]chaojiying.Account{chaojiyingAccount})
if err != nil {
log.Println(err)
}
// 将破解函数注册到微博客户端
// 破解函数的声明为 func(io.Reader) (string, error),只要符合此签名的函数就可以注册
// RegisterCrackPinFunc 可以传入多个破解函数,会逐个尝试
// 这里的Cr4ck即为chaojiying中的破解函数
weibo.RegisterCrackPinFunc(cracker.Cr4ck)
fmt.Println("验证码破解方法注册成功")
// 登录微博 遇到验证码将自动识别
if err := weibo.PCLogin(); err != nil {
log.Fatal(err)
}
// 获取授权码
code, err := weibo.Authorize()
if err != nil {
log.Fatal(err)
}
// 获取access token
token, err := weibo.AccessToken(code)
if err != nil {
log.Fatal(err)
}
// 发送微博,必须带有安全域名链接
status := fmt.Sprintf("文本内容 http://%s", securitydomain)
resp, err := weibo.StatusesShare(token.AccessToken, status, nil)
if err != nil {
log.Println(err)
}
log.Println("微博发送成功 详情点击 http://weibo.com/" + resp.User.ProfileURL)
}
Output:
Example (SendPicWeibo) ¶
发送带图片的微博示例
package main
import (
"fmt"
"log"
"os"
"github.com/axiaoxin-com/weibo"
)
func main() {
// 从环境变量获取必须的账号信息
appkey := os.Getenv("weibo_app_key")
appsecret := os.Getenv("weibo_app_secret")
username := os.Getenv("weibo_username")
passwd := os.Getenv("weibo_passwd")
redirecturi := os.Getenv("weibo_redirect_uri")
securitydomain := os.Getenv("weibo_security_domain")
// 初始化客户端
weibo := weibo.New(appkey, appsecret, username, passwd, redirecturi)
// 登录微博
if err := weibo.PCLogin(); err != nil {
log.Fatal(err)
}
// 获取授权码
code, err := weibo.Authorize()
if err != nil {
log.Fatal(err)
}
// 获取access token
token, err := weibo.AccessToken(code)
if err != nil {
log.Fatal(err)
}
// 发送微博,必须带有安全域名链接
status := fmt.Sprintf("文字带图片示例 http://%s", securitydomain)
// 加载要发送的图片,加载方式只要是返回io.Reader都可以
pic, err := os.Open("./example/pic.jpg")
if err != nil {
log.Fatal(err)
}
defer pic.Close()
resp, err := weibo.StatusesShare(token.AccessToken, status, pic)
if err != nil {
log.Println(err)
}
log.Println("微博发送成功 详情点击 http://weibo.com/" + resp.User.ProfileURL)
}
Output:
Example (SendTextWeibo) ¶
发送存文本内容微博示例
package main
import (
"fmt"
"log"
"os"
"github.com/axiaoxin-com/weibo"
)
func main() {
// 从环境变量获取必须的账号信息
appkey := os.Getenv("weibo_app_key")
appsecret := os.Getenv("weibo_app_secret")
username := os.Getenv("weibo_username")
passwd := os.Getenv("weibo_passwd")
redirecturi := os.Getenv("weibo_redirect_uri")
securitydomain := os.Getenv("weibo_security_domain")
// 初始化客户端
weibo := weibo.New(appkey, appsecret, username, passwd, redirecturi)
// 登录微博
if err := weibo.PCLogin(); err != nil {
log.Fatal(err)
}
// 获取授权码
code, err := weibo.Authorize()
if err != nil {
log.Fatal(err)
}
// 获取access token
token, err := weibo.AccessToken(code)
if err != nil {
log.Fatal(err)
}
// 发送微博,必须带有安全域名链接
status := fmt.Sprintf("文本内容 http://%s", securitydomain)
resp, err := weibo.StatusesShare(token.AccessToken, status, nil)
if err != nil {
log.Println(err)
}
log.Println("微博发送成功 详情点击 http://weibo.com/" + resp.User.ProfileURL)
}
Output:
Index ¶
- Variables
- func RandInt(min int, max int) int
- func RandUA() string
- func RealIP() string
- func TerminalOpen(filePath string) error
- type CrackPinFunc
- type EmotionsResp
- type MobileLoginResp
- type StatusesShareResp
- type TokenInfoResp
- type TokenResp
- type Weibo
- func (w *Weibo) AccessToken(code string) (*TokenResp, error)
- func (w *Weibo) Authorize() (string, error)
- func (w *Weibo) Emotions(token, emotionType, language string) (*EmotionsResp, error)
- func (w *Weibo) MobileLogin() error
- func (w *Weibo) PCLogin() error
- func (w *Weibo) RegisterCrackPinFunc(f ...CrackPinFunc)
- func (w *Weibo) StatusesShare(token, status string, pic io.Reader) (*StatusesShareResp, error)
- func (w *Weibo) TokenInfo(token string) (*TokenInfoResp, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var UserAgents []string = []string{
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36",
}
UserAgents 模拟登录时随机选择其中的 User-Agent 设置请求头
Functions ¶
Types ¶
type CrackPinFunc ¶
CrackPinFunc 验证码破解方法类型声明 验证码图片以 io.Reader 类型传入,返回破解结果字符串
type EmotionsResp ¶ added in v1.0.2
type EmotionsResp []struct {
Category string `json:"category"`
Common bool `json:"common"`
Hot bool `json:"hot"`
Icon string `json:"icon"`
Phrase string `json:"phrase"`
Picid interface{} `json:"picid"`
Type string `json:"type"`
URL string `json:"url"`
Value string `json:"value"`
}
EmotionsResp Emotions接口返回结果
type MobileLoginResp ¶
type MobileLoginResp struct {
Retcode int `json:"retcode"`
Msg string `json:"msg"`
Data map[string]interface{} `json:"data"`
}
MobileLoginResp 移动端登录的返回结果
type StatusesShareResp ¶
type StatusesShareResp struct {
Type int `json:"type"`
ListID int `json:"list_id"`
} `json:"visible"`
ID int64 `json:"id"`
Idstr string `json:"idstr"`
Class int `json:"class"`
ScreenName string `json:"screen_name"`
Name string `json:"name"`
Province string `json:"province"`
City string `json:"city"`
Location string `json:"location"`
Description string `json:"description"`
URL string `json:"url"`
ProfileImageURL string `json:"profile_image_url"`
ProfileURL string `json:"profile_url"`
Domain string `json:"domain"`
Weihao string `json:"weihao"`
Gender string `json:"gender"`
FollowersCount int `json:"followers_count"`
FriendsCount int `json:"friends_count"`
PagefriendsCount int `json:"pagefriends_count"`
StatusesCount int `json:"statuses_count"`
VideoStatusCount int `json:"video_status_count"`
FavouritesCount int `json:"favourites_count"`
CreatedAt string `json:"created_at"`
Following bool `json:"following"`
AllowAllActMsg bool `json:"allow_all_act_msg"`
GeoEnabled bool `json:"geo_enabled"`
Verified bool `json:"verified"`
VerifiedType int `json:"verified_type"`
Remark string `json:"remark"`
Insecurity struct {
SexualContent bool `json:"sexual_content"`
} `json:"insecurity"`
Ptype int `json:"ptype"`
AllowAllComment bool `json:"allow_all_comment"`
AvatarLarge string `json:"avatar_large"`
AvatarHd string `json:"avatar_hd"`
VerifiedReason string `json:"verified_reason"`
VerifiedTrade string `json:"verified_trade"`
VerifiedReasonURL string `json:"verified_reason_url"`
VerifiedSource string `json:"verified_source"`
VerifiedSourceURL string `json:"verified_source_url"`
FollowMe bool `json:"follow_me"`
Like bool `json:"like"`
LikeMe bool `json:"like_me"`
OnlineStatus int `json:"online_status"`
BiFollowersCount int `json:"bi_followers_count"`
Lang string `json:"lang"`
Star int `json:"star"`
Mbtype int `json:"mbtype"`
Mbrank int `json:"mbrank"`
BlockWord int `json:"block_word"`
BlockApp int `json:"block_app"`
CreditScore int `json:"credit_score"`
UserAbility int `json:"user_ability"`
Urank int `json:"urank"`
StoryReadState int `json:"story_read_state"`
VclubMember int `json:"vclub_member"`
IsTeenager int `json:"is_teenager"`
IsGuardian int `json:"is_guardian"`
IsTeenagerList int `json:"is_teenager_list"`
SpecialFollow bool `json:"special_follow"`
TabManage string `json:"tab_manage"`
} `json:"user"`
CommentManageButton int `json:"comment_manage_button"`
CommentPermissionType int `json:"comment_permission_type"`
ApprovalCommentType int `json:"approval_comment_type"`
} `json:"comment_manage_info"`
}
StatusesShareResp 微博成功发送后的返回结构
type TokenInfoResp ¶
type TokenInfoResp struct {
UID string `json:"uid"`
Appkey string `json:"appkey"`
Scope string `json:"scope"`
CreateAt string `json:"create_at"`
ExpireIn string `json:"expire_in"`
}
TokenInfoResp 查询 token 信息接口的返回结果
type TokenResp ¶
type TokenResp struct {
AccessToken string `json:"access_token"` // access token
ExpiresIn int64 `json:"expires_in"` // ExpiresIn 秒之后token过期
UID string `json:"uid"`
IsRealName string `json:"isRealName"`
}
TokenResp 获取 access token 接口的返回结果
type Weibo ¶
type Weibo struct {
// contains filtered or unexported fields
}
Weibo 实例,在其上实现各类接口
func New ¶
New 创建Weibo实例
appkey 微博开放平台应用的 appkey
appsecret 微博开放平台应用的 appsecret
username 需要发微博的微博登录账号,用于模拟登录直接获取授权码
password 需要发微博的微博登录密码,用于模拟登录直接获取授权码
redirecturi 微博开发平台应用的回调 URL
func (*Weibo) AccessToken ¶
AccessToken 传入授权码请求 access_token 接口,返回 TokenResp 对象
func (*Weibo) Emotions ¶ added in v1.0.2
func (w *Weibo) Emotions(token, emotionType, language string) (*EmotionsResp, error)
Emotions 获取微博官方表情的详细信息
func (*Weibo) MobileLogin ¶
MobileLogin 模拟移动端登录微博 (该登录无法通过调用 Authorize 方法获取开放平台的 token)
func (*Weibo) RegisterCrackPinFunc ¶
func (w *Weibo) RegisterCrackPinFunc(f ...CrackPinFunc)
RegisterCrackPinFunc 注册验证码破解方法到 Weibo 实例 触发验证码时自动调用注册的方法进行破解后模拟登录
func (*Weibo) StatusesShare ¶
StatusesShare 第三方分享一条链接到微博
token 为获取到的access_token内容
status 为微博文字内容
pic 为附带的一张图片,传nil则只发文字