DEV Community

drake
drake

Posted on • Edited on

统计X列表页成员信息

依赖:https://github.com/tweepy/tweepy


单个list页

import tweepy
import time
import csv


def get_all_members():
    """
    获取list页的所有成员信息
    return: list [[1903792582620319744, '0xFlowers89236']]
    """
    X_BEARER_TOKEN = 'AA'

    client = tweepy.Client(bearer_token=X_BEARER_TOKEN)
    list_id = '1918225637397143707'

    all_members = []
    pagination_token = None

    while True:
        response = client.get_list_members(
            id=list_id,
            pagination_token=pagination_token,
            max_results=100  # 最大值为100
        )
        # 打印当前页的成员用户名
        for user in response.data or []:
            all_members.append([user.id, user.username])
            print(f"@{user.username}")

        # 检查是否还有下一页
        if 'next_token' in response.meta:
            pagination_token = response.meta['next_token']
            time.sleep(5)  # 避免速率限制
        else:
            break

    print(f"共获取 {len(all_members)} 位成员")
    print(all_members)
    return all_members


members = get_all_members()
with open('1918225637397143707.csv', 'a', encoding='utf-8-sig', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for m in members:
        writer.writerow(m)


Enter fullscreen mode Exit fullscreen mode

多个list页

import tweepy
import time
import csv


def get_all_members(list_id):
    """
    获取list页的所有成员信息
    return: list [[1903792582620319744, '0xFlowers89236']]
    """
    X_BEARER_TOKEN = 'A'

    client = tweepy.Client(bearer_token=X_BEARER_TOKEN)
    # list_id = '1918225637397143707'

    all_members = []
    pagination_token = None

    while True:
        response = client.get_list_members(
            id=list_id,
            pagination_token=pagination_token,
            max_results=100  # 最大值为100
        )
        # 打印当前页的成员用户名
        for user in response.data or []:
            all_members.append([user.id, user.username])
            print(f"@{user.username}")

        # 检查是否还有下一页
        if 'next_token' in response.meta:
            pagination_token = response.meta['next_token']
            time.sleep(5)  # 避免速率限制
        else:
            break

    print(f"共获取 {len(all_members)} 位成员")
    print(all_members)
    return all_members

list_ids = [ "1919016360887427561", "1918225637397143707", "1914959721876029749", "1698483049569132665", "1918965870594023475", "1918960366379475416", "1698480499784585706", "1914927321808822708", "1686294729045196801", "1918950067895140605", "1914668581713011045", "1914876137026806061", "1918933961297838431", "1919009469599777119", "1918928583692779900", "1702109517440549055", "1919020662892753028", "1691068475110989953", "1914647432857821409", "1698870371959849207", "1919026082726187376", "1918956225137709538", "1698531713486664178", "1914953390976852191", "1914595632096198993", "1703601964309967044", "1914946270147592326", "1686667091594891264", "1918972382003581006", "1919036353746223475" ]

# 所有list页的成员
list_ids_members = []
for list_id in list_ids:
    # 单个list页的成员
    list_id_members = get_all_members(list_id)
    list_ids_members.extend(list_id_members)


print(list_ids_members)

members = []
for mem in list_ids_members:
    if mem not in members:
        members.append(mem)
print(members)

with open('total_members.csv', 'a', encoding='utf-8-sig', newline='') as csvfile:
    writer = csv.writer(csvfile)
    for m in members:
        writer.writerow(m)

Enter fullscreen mode Exit fullscreen mode

Top comments (0)