Могу ли я загрузить все медиа, которые я лайкнул в Twitter, начиная с конкретного твита?

Я ранее использовал WFDownloader для скачивания медиа из лайкнутых твитов, но сейчас хочу перейти на snscrape. Мне необходимо загружать файлы, начиная с конкретного твита, указанного по ID или дате. 

У меня возникли две проблемы: 
1. Возможно ли использовать snscrape для выгрузки лайкнутых твитов с медиа, начиная с определённого момента? 
2. При выполнении команды: 
   `snscrape --since 2024-02-08 twitter-user > tweets.txt` 
   я получаю ошибку: 
   `SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)'))`. 
   Я пробовал обновить certifi и pip, а также запускать с установкой переменной `set PYTHONHTTPSVERIFY=0`, но это не помогло. 

Как можно обойти проблему с SSL и правильно настроить snscrape для скачивания только лайкнутых твитов с медиа и начиная с определённого твита? Кроме того, есть ли альтернативные инструменты для этой задачи?
  • 29 января 2025 г. 15:24
Ответы на вопрос 1
Для решения ваших вопросов по использованию `snscrape` для загрузки медиа из лайкнутых твитов, а также для устранения ошибки SSL, вот несколько рекомендаций:

### 1. Выгрузка лайкнутых твитов с медиа, начиная с определённого момента
`snscrape` поддерживает выборку твитов по меткам времени, и вы можете использовать параметр `--since` для указания даты, начиная с которой вы хотите получать твиты. Однако для получения только лайков необходимо учитывать, что `snscrape` напрямую не поддерживает выборку лайкнутых твитов через командную строку, поскольку эта функция больше относится к API.

Для захвата медиа из лайкнутых твитов вам нужно будет:
- Найти идентификаторы твитов или даты, с которых хотите начать.
- Запускать скрипт на Python, чтобы вручную фильтровать и сохранять данные медиа.

Примерный процесс:
```python
import snscrape.modules.twitter as sntwitter
import pandas as pd

# Укажите ваш ID твита, с которого хотите начинать
start_tweet_id = 'ваш_идентификатор_твита'

tweets = []
for tweet in sntwitter.TwitterUserLikes('ваш_ник_в_Twitter', limit=None):
    # Добавьте проверку для остановки, если найден твит с start_tweet_id
    if tweet.id_str == start_tweet_id:
        break
    if tweet.hasMedia:
        tweets.append(tweet)

# Сохранение в DataFrame и экспорт в CSV для дальнейшей обработки
df = pd.DataFrame(tweets)
df.to_csv('liked_tweets_with_media.csv', index=False)
```

### 2. Ошибка SSL
Ошибка `SSLError` связана с проблемами верификации SSL-сертификатов при использовании Python на вашей машине. Вы можете попробовать следующие подходы для её решения:

- **Убедитесь, что ваш Python обновлён**. Скачайте последнюю версию Python и установите её. После установки обновите `pip`, `setuptools` и `wheel`.

- **Переустановите certifi**: Вы можете использовать команду:
  ```bash
  pip install --upgrade certifi
  ```

- **Попробуйте использовать другой Python**: Иногда установка Anaconda или Miniconda может помочь, так как они могут включать необходимые сертификаты.

- **Настройка среды**:
  Попробуйте запустить команду в терминале, используя:
  ```bash
  python -m pip install --upgrade certifi
  ```

- Если проблему не удается решить, временно отключение верификации SSL можно сделать, добавив Python-флаг, но это не рекомендуется с точки зрения безопасности:
  ```bash
  set PYTHONHTTPSVERIFY=0
  ```

### Альтернативные инструменты
Если вам не нужно связываться с кодом или `snscrape` не подходит, можно рассмотреть следующие инструменты:
- **Twarc**: Очень полезен для работы с Twitter API и может помочь сохранять данные.
- **GetOldTweets**: Старый, но может помочь в некоторых случаях.

Каждый из этих инструментов имеет свои ограничения и нюансы, так что выбирайте в зависимости от ваших потребностей.
Похожие вопросы