抖音获取用户公开信息源码

这个项目分享的如何基于抖音平台,开发的java源码:API覆盖率超过95%, 只需要简单的修改一下配置文件, 就能轻松调用api.自动集成官方SDK, 切换使用原生一样方便! 多种选择, 轻松适配!根据视频大小, 自动切换视频分片上传, 轻松避免异常, 保证接口安全.接口分类清晰, 操作简单明了
[订阅获取教程全部和source code]

用户授权后可获取用户相关信息返回的结果是:

相关的文档:

Scope: user_info 需要用户授权 该接口获取用户的抖音公开信息,包含昵称、头像、性别和地区;适用于抖音。

注意:

抖音的OAuth API以https://open.douyin.com/开头。
头条的OAuth API以https://open.snssdk.com/开头。
目前只支持返回用户头像、昵称及open_id。
西瓜的OAuth API以https://open-api.ixigua.com/开头。
目前只支持返回用户头像、昵称及open_id。

获取用户手机号:

需要用户授权mobile_alert 权限
 用户授权后该接口会返回encrypt_mobile
解密手机号,使用Aes算法解密,秘钥是clientSecret, 向量lv 是clientSecret前16字节

实现相关源码:

package com.jason.open.api.user;

import cn.hutool.core.util.StrUtil;
import com.douyin.open.api.FansListApi;
import com.douyin.open.api.FollowingListApi;
import com.douyin.open.api.UserInfoApi;
import com.douyin.open.models.UserFansFansInlineResponse200;
import com.douyin.open.models.UserFollowingFollowingInlineResponse200;
import com.douyin.open.models.UserUserInfoUserInfoInlineResponse200;
import com.jason.open.api.utils.exception.UserException;
import org.springframework.web.client.RestClientException;

 
public class UserManager {

    private UserInfoApi userInfoApi;

    private FansListApi fansListApi;

    private FollowingListApi followingListApi;

    /**
     * 初始构造
     */
    public UserManager() {
        if (userInfoApi == null) {
            userInfoApi = new UserInfoApi();
        }

        if (fansListApi == null) {
            fansListApi = new FansListApi();
        }

        if (followingListApi == null) {
            followingListApi = new FollowingListApi();
        }
    }

    /**
     * 获取用户公开信息 Scope: `user_info`需要用户授权
     */
    public UserUserInfoUserInfoInlineResponse200 getUserInfo(String openId, String accessToken) {
        if (StrUtil.isBlank(openId)||StrUtil.isBlank(accessToken)) {
            throw new UserException("openId 或者 accessToken 不能为空!!");
        }

        UserUserInfoUserInfoInlineResponse200 result = null;
        try {
            result = userInfoApi.oauthUserinfoGet(openId, accessToken);
        } catch (RestClientException e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 获取粉丝列表 Scope: `fans.list`需要用户授权
     * @param openId        用户唯一标志
     * @param accessToken   accessToken
     * @param pageNum       当前页
     * @param pageSize      每页总记录数
     */
    public UserFansFansInlineResponse200 getFansList(String openId, String accessToken,Integer pageNum,Integer pageSize) {
        if (StrUtil.isBlank(openId)||StrUtil.isBlank(accessToken)) {
            throw new UserException("openId 或者 accessToken 不能为空!!");
        }

        long pageRow = 0;
        if (pageNum!=null&&pageNum>0) {
            pageRow = (long)(pageNum*pageSize - pageSize);
        }

        UserFansFansInlineResponse200 result = null;

        try {
            result = fansListApi.fansListGet(openId,accessToken,pageSize,pageRow);
        } catch (RestClientException e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 获取关注列表 Scope: `following.list`需要用户授权
     * @param openId        用户唯一标志
     * @param accessToken   accessToken
     * @param pageNum       当前页
     * @param pageSize      每页总记录数
     */
    public UserFollowingFollowingInlineResponse200 getUserFollow(String openId, String accessToken,Integer pageNum,Integer pageSize) {
        if (StrUtil.isBlank(openId)||StrUtil.isBlank(accessToken)) {
            throw new UserException("openId 或者 accessToken 不能为空!!");
        }

        long pageRow = 0;
        if (pageNum!=null&&pageNum>0) {
            pageRow = (long)(pageNum*pageSize - pageSize);
        }

        UserFollowingFollowingInlineResponse200 result = null;

        try {
            result = followingListApi.followingListGet(openId,accessToken,pageSize,pageRow);
        } catch (RestClientException e) {
            e.printStackTrace();
        }

        return result;
    }

}

 项目源码地址:

https://github.com/LovebuildJ/douyin-open-api-sdk

### Web开发获取用户手机号的方法 为了在Web应用程序中安全地获取用户的手机号,开发者需遵循特定的权限请求和API调用流程。此过程涉及OAuth认证机制以及加密处理。 #### OAuth 认证与权限申请 首先,应用必须引导用户完成OAuth授权流程并获得`mobile_alert`权限。这一步骤确保了只有经过明确同意的情况下才能访问敏感信息如电话号码[^1]。 一旦获得了必要的授权许可,在服务器端应发起HTTPS POST请求至指定URL来交换临时授权码(code),进而换取access_token: ```http POST https://open.douyin.com/oauth/access_token/ Content-Type: application/json { "client_key": "{your_client_key}", "client_secret": "{your_client_secret}", "grant_type": "authorization_code", "code": "{auth_code}" } ``` 成功响应将包含`access_token`和其他相关信息。 #### 请求加密后的手机号数据 拥有有效的`access_token`之后,可以通过向以下地址发送GET请求来获取已加密形式存储的用户手机号(`encrypt_mobile`): ```http GET https://open.douyin.com/user/mobile/?access_token={ACCESS_TOKEN}&openid={OPEN_ID} ``` 注意这里还需要提供具体的`openid`参数用于标识目标账户。 #### 数据解密 接收到的`encrypt_mobile`字段采用AES算法进行了保护,其密钥即为客户端配置中的`clientSecret`,而初始化向量(IV)则是取自同一字符串最前面的十六个字符。 对于Python环境下的实现方式如下所示: ```python from Crypto.Cipher import AES import base64 def decrypt_phone_number(client_secret, encrypted_data): cipher = AES.new(key=client_secret.encode(), mode=AES.MODE_CBC, iv=client_secret[:16].encode()) decrypted_data = unpad(cipher.decrypt(base64.b64decode(encrypted_data)), AES.block_size).decode() return decrypted_data def unpad(s): padding_length = ord(s[-1:]) if not (0 < padding_length <= 16): raise ValueError('Invalid padding...') if s[-padding_length:] != chr(padding_length)*padding_length: raise ValueError('Invalid padding...') return s[:-padding_length] ``` 上述代码片段展示了如何利用PyCryptodome库对接收到的数据执行解密操作,并定义了一个辅助函数来进行PKCS7填充移除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Softboy_TM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值