Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I need help to get 2 fields info of my all Patreon members #44

Open
FurkanGozukara opened this issue Jun 5, 2024 · 0 comments
Open

Comments

@FurkanGozukara
Copy link

I need my all time all members Member Attributes lifetime_support_cents

Thank you for help @21echoes @monokrome @phildini @lynneatan @luizirber @tanabi @emosesPatreon

So from all campaigns and all tiers

Plus to this I need their discord id or username - they can have multiple it is fine i need to get all

Discord has several i don't know which is exactly users discord id or username

https://docs.patreon.com/#get-api-oauth2-v2-campaigns-campaign_id-members
https://docs.patreon.com/#fetching-a-patron-39-s-profile-info

attributes > discord_id
social_connections > discord
attributes > discord_role_ids

Nothing else

I have been struggling to get these 2 info for hours

But nothing returns

Here my so far code. If you just tell me code of api_client fetch command i can do rest

I need all time, all campaigns and all tiers data

This below code returns all null data for all members. However I have over 500 discord ids in those members. I know because I was able to see them before their recent interface update.

import os
import json
import requests
from patreon import API, OAuth

# Patreon API authentication
client_id = "client_id"
client_secret = "client_secret"
 
access_token = "access_token"
refresh_token = "refresh_token"

api_client = API(access_token)

import os
import json


# Check if results.json exists
if os.path.exists("results2.json"):
    # Load data from results.json
    with open("results.json2", "r", encoding="utf-8") as file:
        all_patrons = json.load(file)
else:
    # Fetch all patrons
    all_patrons = {}
    cursor = None

    # Get the campaign ID
    campaign_response = api_client.fetch_campaign()
    campaign_id = campaign_response.json_data['data'][0]['id']

    while True:
        pledges_response = api_client.fetch_page_of_pledges(campaign_id, 250, cursor=cursor)
        pledges = pledges_response.data()

        for pledge in pledges:
            included_members = pledge.document.json_data.get('included', [])
            data_members = pledge.document.json_data.get('data', [])
            data_members2 = pledge.document.json_data.get('included', [])

            for member in included_members + data_members + data_members2:
                if 'attributes' in member:
                    discord_id = member['attributes'].get('discord_id')
                    discord_username = member['attributes'].get('social_connections', {}).get('discord')
                    email = member['attributes'].get('email')
                    unique_key = f"{discord_id}_{discord_username}_{email}"

                    if unique_key not in all_patrons:
                        patron_data = {
                            "email": email,
                            "discord_username": discord_username,
                            "discord_id": discord_id
                        }
                        all_patrons[unique_key] = patron_data

        print(f"Fetching {cursor}")
        cursor = api_client.extract_cursor(pledges_response)
        if not cursor:
            break

    # Convert the dictionary values to a list
    all_patrons = list(all_patrons.values())

    # Save data to results.json
    with open("results2.json", "w", encoding="utf-8") as file:
        json.dump(all_patrons, file, ensure_ascii=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant