QQ 号 API 获取用户高清头像教程及多语言代码
福利源码

QQ 号 API 获取用户高清头像教程及多语言代码

福利源码
1月12日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年01月12日,已超过24天没有更新,若内容或图片失效,请留言反馈。

借助QQ号API获取用户高清QQ头像与昵称的实用指南

在投身Typecho开发、WordPress开发,亦或是其他涉及QQ用户的项目进程中,获取用户头像这一需求极为常见。经过一番探寻,我成功找到了可获取QQ高清头像的API接口,在此迫不及待地想要分享给大家。

调用截图

调用截图

一、普通头像API

普通头像的获取,可借助以下两个API地址实现:

  1. http://q1.qlogo.cn/g?b=qq&nk=QQ号码&s=100
    在实际访问这个链接时,我们以QQ号码为123456789为例,当将其替换到链接中的QQ号码位置后,完整链接变为http://q1.qlogo.cn/g?b=qq&nk=123456789&s=100。通过访问此链接,便可得到该QQ号码对应的尺寸为100×100像素的普通头像。这一API接口能够稳定地提供普通尺寸的头像资源,适用于对头像清晰度要求不高,仅需快速展示头像的场景,例如一些列表页面,对头像清晰度的需求低于对加载速度的要求。
  2. http://q2.qlogo.cn/headimg_dl?dst_uin=QQ号码&spec=100
    同样以QQ号码123456789为例,替换后链接为http://q2.qlogo.cn/headimg_dl?dst_uin=123456789&spec=100。访问该链接,同样能获取到尺寸为100×100像素的普通头像。这个API与第一个类似,都是提供普通尺寸头像的获取途径,项目开发者可以根据实际的项目架构和需求,灵活选择使用。

二、高清头像API

若期望获取高清头像,可使用如下API:http://q.qlogo.cn/headimg_dl?dst_uin=QQ号码&spec=640&img_type=jpg
当使用QQ号码123456789时,链接会变成http://q.qlogo.cn/headimg_dl?dst_uin=123456789&spec=640&img_type=jpg。访问修改后的链接,就能得到分辨率较高、细节更为丰富的高清头像,其尺寸达到640×640像素 ,格式为JPG。在项目中,若需要展示头像细节,或者在一些重要的展示区域使用头像,高清头像就显得尤为重要,这个API接口就为我们提供了这样的资源。

三、QQ昵称API(已失效)

曾经可用于获取QQ昵称的API为http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=QQ号码。以QQ号码123456789为例,替换后链接为http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins=123456789,在该API失效前,访问链接可得到对应QQ号码的昵称。但目前此接口已无法正常使用,若项目中需要获取QQ昵称,开发者需寻找其他替代方案,比如尝试通过QQ互联平台等正规渠道申请相关接口权限,以满足获取昵称的需求。

四、示例调用代码

下面为大家提供多种语言调用上述头像API的示例代码,帮助大家更好地在项目中实现头像获取功能。

Python

import requests

def get_qq_avatar(qq_number, is_high_quality=True):
    if is_high_quality:
        api_url = f"http://q.qlogo.cn/headimg_dl?dst_uin={qq_number}&spec=640&img_type=jpg"
    else:
        api_url = f"http://q1.qlogo.cn/g?b=qq&nk={qq_number}&s=100"
    response = requests.get(api_url)
    if response.status_code == 200:
        with open(f"{qq_number}_avatar.jpg", "wb") as f:
            f.write(response.content)
        print(f"成功获取{'高清' if is_high_quality else '普通'}头像并保存为{qq_number}_avatar.jpg")
    else:
        print(f"获取头像失败,状态码:{response.status_code}")

qq_number = "123456789"
get_qq_avatar(qq_number, is_high_quality=True)
get_qq_avatar(qq_number, is_high_quality=False)

Java

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class QQAvatarFetcher {
    public static void getQQAvatar(String qqNumber, boolean isHighQuality) {
        String apiUrl;
        if (isHighQuality) {
            apiUrl = String.format("http://q.qlogo.cn/headimg_dl?dst_uin=%s&spec=640&img_type=jpg", qqNumber);
        } else {
            apiUrl = String.format("http://q1.qlogo.cn/g?b=qq&nk=%s&s=100", qqNumber);
        }
        try {
            URL url = new URL(apiUrl);
            URLConnection connection = url.openConnection();
            InputStream inputStream = connection.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(String.format("%s_avatar.jpg", qqNumber));
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            outputStream.close();
            inputStream.close();
            System.out.println(String.format("成功获取%s头像并保存为%s_avatar.jpg", isHighQuality ? "高清" : "普通", qqNumber));
        } catch (IOException e) {
            System.out.println(String.format("获取头像失败:%s", e.getMessage()));
        }
    }

    public static void main(String[] args) {
        String qqNumber = "123456789";
        getQQAvatar(qqNumber, true);
        getQQAvatar(qqNumber, false);
    }
}

JavaScript(Node.js环境)

const https = require('https');
const fs = require('fs');

function getQQAvatar(qqNumber, isHighQuality) {
    let apiUrl;
    if (isHighQuality) {
        apiUrl = `http://q.qlogo.cn/headimg_dl?dst_uin=${qqNumber}&spec=640&img_type=jpg`;
    } else {
        apiUrl = `http://q1.qlogo.cn/g?b=qq&nk=${qqNumber}&s=100`;
    }
    https.get(apiUrl, (response) => {
        const filePath = `${qqNumber}_avatar.jpg`;
        const fileStream = fs.createWriteStream(filePath);
        response.pipe(fileStream);
        fileStream.on('finish', () => {
            console.log(`成功获取${isHighQuality ? '高清' : '普通'}头像并保存为${filePath}`);
        });
        response.on('error', (error) => {
            console.log(`获取头像失败:${error.message}`);
        });
    });
}
const qqNumber = "123456789";
getQQAvatar(qqNumber, true);
getQQAvatar(qqNumber, false);

C

using System;
using System.IO;
using System.Net;

class Program
{
    static void GetQQAvatar(string qqNumber, bool isHighQuality)
    {
        string apiUrl;
        if (isHighQuality)
        {
            apiUrl = string.Format("http://q.qlogo.cn/headimg_dl?dst_uin={0}&spec=640&img_type=jpg", qqNumber);
        }
        else
        {
            apiUrl = string.Format("http://q1.qlogo.cn/g?b=qq&nk={0}&s=100", qqNumber);
        }
        try
        {
            WebRequest request = WebRequest.Create(apiUrl);
            using (WebResponse response = request.GetResponse())
            using (Stream inputStream = response.GetResponseStream())
            using (FileStream outputStream = new FileStream($"{qqNumber}_avatar.jpg", FileMode.Create))
            {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    outputStream.Write(buffer, 0, bytesRead);
                }
            }
            Console.WriteLine($"成功获取{(isHighQuality ? "高清" : "普通")}头像并保存为{qqNumber}_avatar.jpg");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"获取头像失败:{ex.Message}");
        }
    }
    static void Main()
    {
        string qqNumber = "123456789";
        GetQQAvatar(qqNumber, true);
        GetQQAvatar(qqNumber, false);
    }
}

PHP

<?php
function getQQAvatar($qqNumber, $isHighQuality = true)
{
    if ($isHighQuality) {
        $apiUrl = "http://q.qlogo.cn/headimg_dl?dst_uin={$qqNumber}&spec=640&img_type=jpg";
    } else {
        $apiUrl = "http://q1.qlogo.cn/g?b=qq&nk={$qqNumber}&s=100";
    }
    $imgData = file_get_contents($apiUrl);
    if ($imgData !== false) {
        $fileName = $isHighQuality ? "{$qqNumber}_high_quality_avatar.jpg" : "{$qqNumber}_avatar.jpg";
        file_put_contents($fileName, $imgData);
        echo "成功获取" . ($isHighQuality ? "高清" : "普通") . "头像并保存为{$fileName}<br>";
    } else {
        echo "获取头像失败<br>";
    }
}
$qqNumber = "123456789";
getQQAvatar($qqNumber, true);
getQQAvatar($qqNumber, false);
?>

Go

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

func getQQAvatar(qqNumber string, isHighQuality bool) {
    var apiUrl string
    if isHighQuality {
        apiUrl = fmt.Sprintf("http://q.qlogo.cn/headimg_dl?dst_uin=%s&spec=640&img_type=jpg", qqNumber)
    } else {
        apiUrl = fmt.Sprintf("http://q1.qlogo.cn/g?b=qq&nk=%s&s=100", qqNumber)
    }
    resp, err := http.Get(apiUrl)
    if err != nil {
        log.Fatalf("获取头像失败: %v", err)
    }
    defer resp.Body.Close()
    out, err := os.Create(fmt.Sprintf("%s_avatar.jpg", qqNumber))
    if err != nil {
        log.Fatalf("创建文件失败: %v", err)
    }
    defer out.Close()
    _, err = io.Copy(out, resp.Body)
    if err != nil {
        log.Fatalf("写入文件失败: %v", err)
    }
    fmt.Printf("成功获取%s头像并保存为%s_avatar.jpg\n", func() string {
        if isHighQuality {
            return "高清"
        }
        return "普通"
    }(), qqNumber)
}
func main() {
    qqNumber := "123456789"
    getQQAvatar(qqNumber, true)
    getQQAvatar(qqNumber, false)
}

Ruby

require 'net/http'
require 'uri'

def get_qq_avatar(qq_number, is_high_quality)
  if is_high_quality
    api_url = "http://q.qlogo.cn/headimg_dl?dst_uin=#{qq_number}&spec=640&img_type=jpg"
  else
    api_url = "http://q1.qlogo.cn/g?b=qq&nk=#{qq_number}&s=100"
  end
  uri = URI(api_url)
  response = Net::HTTP.get(uri)
  file_name = "#{qq_number}_#{is_high_quality ? 'high_quality_' : ''}avatar.jpg"
  File.write(file_name, response)
  puts "成功获取#{is_high_quality ? '高清' : '普通'}头像并保存为#{file_name}"
rescue StandardError => e
  puts "获取头像失败: #{e.message}"
end
qq_number = "123456789"
get_qq_avatar(qq_number, true)
get_qq_avatar(qq_number, false)

Swift(用于iOS/macOS开发,需在合适的项目环境中运行)

import Foundation
func getQQAvatar(qqNumber: String, isHighQuality: Bool, completion: @escaping (Result<Data, Error>) -> Void) {
    let apiUrl: String
    if isHighQuality {
        apiUrl = "http://q.qlogo.cn/headimg_dl?dst_uin=\(qqNumber)&spec=640&img_type=jpg"
    } else {
        apiUrl = "http://q1.qlogo.cn/g?b=qq&nk=\(qqNumber)&s=100"
    }
    guard let url = URL(string: apiUrl) else {
        completion(.failure(NSError(domain: "Invalid URL", code: 0, userInfo: nil)))
        return
    }
    URLSession.shared.dataTask(with: url) { data, response, error in
        if let error = error {
            completion(.failure(error))
            return
        }
        guard let data = data else {
            completion(.failure(NSError(domain: "No data received", code: 0, userInfo: nil)))
            return
        }
        completion(.success(data))
    }.resume()
}
let qqNumber = "123456789"
getQQAvatar(qqNumber: qqNumber, isHighQuality: true) { result in
    switch result {
    case .success(let data):
        let filePath = "\(NSTemporaryDirectory())\(qqNumber)_high_quality_avatar.jpg"
        do {
            try data.write(to: URL(fileURLWithPath: filePath))
            print("成功获取高清头像并保存到\(filePath)")
        } catch {
            print("保存高清头像失败: \(error)")
        }
    case .failure(let error):
        print("获取高清头像失败: \(error)")
    }
}
getQQAvatar(qqNumber: qqNumber, isHighQuality: false) { result in
    switch result {
    case .success(let data):
        let filePath = "\(NSTemporaryDirectory())\(qqNumber)_avatar.jpg"
        do {
            try data.write(to: URL(fileURLWithPath: filePath))
            print("成功获取普通头像并保存到\(filePath)")
        } catch {
            print("保存普通头像失败: \(error)")
        }
    case .failure(let error):
        print("获取普通头像失败: \(error)")
    }
}

上述代码在各自语言环境下,根据传入的QQ号码和是否获取高清头像的参数,从对应的API获取头像数据,并将头像保存为本地文件。在实际使用中,请确保你的环境满足相应语言和库的运行要求,同时注意处理可能出现的网络请求错误和文件操作错误。另外,由于网络环境和QQ服务器的限制,实际运行效果可能会有所不同。

文章版权声明 1、本网站名称:福利源码
2、本站永久网址:https:/www.fulicode.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
取消 登录评论
SSL