Отслеживание пожертвований «Donationalerts»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отслеживание пожертвований «Donationalerts»

Сообщение Anonymous »

Мне нужен актуальный список пожертвований, чтобы я мог отслеживать пользователей, сколько они пожертвовали и какие комментарии оставили. Я пытался использовать их API, но всегда получал сообщение «Неавторизовано». Я получил токен, но с его помощью не смог получить списки жертвователей:

Код: Выделить всё

using System.Net.Http;
using System.Threading.Tasks;
using System.Text.Json;
using System.Net.Http.Headers;

// Start
private static async Task Check()
{

Log.Info("accessToken Take Token");

string clientId = "ID";
string clientSecret = "SECRET";
string accessToken = await GetAccessToken(clientId, clientSecret);

Log.Info("Token: "+accessToken);

if (!string.IsNullOrEmpty(accessToken))
{
Log.Info("accessToken Work");
await GetDonations(accessToken);
}
else
{
Log.Info("accessToken BAD");
}
}

// Take access token
private static async Task GetAccessToken(string clientId, string clientSecret)
{
using (var client = new HttpClient())
{
var values = new Dictionary
{
{ "client_id", clientId },
{ "client_secret", clientSecret },
{ "grant_type", "client_credentials" }
};

var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("https://www.donationalerts.com/oauth/token", content);
var responseString = await response.Content.ReadAsStringAsync();

// Debug
Log.Info("accessToken API: " + responseString.ToString());

// JSON
try
{
using (JsonDocument doc = JsonDocument.Parse(responseString))
{
JsonElement root = doc.RootElement;
if (root.TryGetProperty("access_token", out JsonElement tokenElement))
{
return tokenElement.GetString() ?? string.Empty;
}
}
}
catch (JsonException ex)
{
Log.Error($"accessToken Ошибка разбора JSON: {ex.Message}");
}
return string.Empty;
}
}

// Donats
private static async Task GetDonations(string accessToken)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.GetAsync("https://www.donationalerts.com/api/v1/alerts/donations");

// Проверка на успешный ответ
if (!response.IsSuccessStatusCode)
{
Console.WriteLine($"Error : {response.StatusCode}");
return;
}

var responseString = await response.Content.ReadAsStringAsync();

Console.WriteLine("Last Donats: ");
Console.WriteLine(responseString);

try
{
//  JSON
using (JsonDocument doc = JsonDocument.Parse(responseString))
{
JsonElement root = doc.RootElement;
foreach (JsonElement donation in root.GetProperty("data").EnumerateArray())
{

string? username = donation.GetProperty("username").GetString();
decimal? amount = donation.GetProperty("amount").GetDecimal();
string? currency = donation.GetProperty("currency").GetString();
string? message = donation.GetProperty("message").GetString();

Console.WriteLine($"User {username}: {amount} {currency}, Message: {message}");

}
}
}
catch (JsonException ex)
{
Log.Error($"accessToken Error JSON: {ex.Message}");
}
}
}
Меня всегда не авторизуют
Я решил попробовать использовать Python для отслеживания пожертвований напрямую, через Интернет. Это примерно то же самое, что открыть окно, где показаны все пожертвования.
Это работает, но... часто отключается где-то раз в минуту. За то время, пока бот выключен, он может пропустить пожертвование и ничего не зафиксировать. Это касается и времени, пока он был отключен, получить данные о пожертвованиях за определенный период просто невозможно. Например, веб-страница пожертвований каким-то образом сама определяет, какие пожертвования на ней не показаны.

Код: Выделить всё

import json
import socketio

da_alert_widget_token = 'TOKEN'

sio = socketio.Client(reconnection=True, reconnection_delay=5)

@sio.on('disconnect')
def on_disconnect():
print('Disconnect')

@sio.on('reconnect')
def on_reconnect():
print('Reconnect')

@sio.on('connect')
def on_connect():
sio.emit('add-user', {'token': da_alert_widget_token, "type": "alert_widget"})
print('Start')

@sio.on('donation')
def on_donation(data):
event = json.loads(data)
print(f'Donat: {event["username"]} - {event["amount"]} {event["currency"]}\nMessage: {event["message"]}')

sio.connect('wss://socket.donationalerts.ru:443', transports='websocket')

# Wait
sio.wait()
Пожалуйста, помогите мне получить данные о пожертвованиях. Мне нужно как-то достоверно получить информацию либо обо всех пожертвованиях, либо о последних, которые не были зафиксированы. Я хочу фиксировать все пожертвования без потерь.

Подробнее здесь: https://stackoverflow.com/questions/791 ... tionalerts
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Отслеживание пожертвований «Donationalerts»
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Понимание интеграции Stripe Connect для модуля пожертвований в PHP/Laravel
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Форма пожертвований GiveP, изображенное изображение, не отображаемое в пользовательской теме WordPress (Risehand)
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Экспо отслеживание на переднем плане останавливается на Android при выключении экрана - отслеживание тропы неожиданно ос
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Отслеживание сообщений с помощью Telethon
    Гость » » в форуме Python
    0 Ответы
    53 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»