feat: add instagram session file

This commit is contained in:
Kristofers Solo 2025-09-28 01:26:04 +03:00
parent fd389020c8
commit 85f7b9d2fb
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED
3 changed files with 21 additions and 4 deletions

View File

@ -7,9 +7,11 @@ services:
BINARY_NAME: tg-relay-rs
environment:
TELOXIDE_TOKEN: ${TELOXIDE_TOKEN}
COOKIES_PATH: /app/yt-cookies.txt
COOKIES_PATH: ${YT_COOKIES_PATH:-/app/yt-cookies.txt}
SESSION_PATH: ${IG_SESSION_PATH:-/app/ig-session}
RUST_LOG: ${RUST_LOG:-info}
restart: unless-stopped
volumes:
- ./comments.txt:/app/comments.txt:ro
- /etc/secrets/yt-cookies.txt:/app/yt-cookies.txt:rw
- /etc/secrets/ig-session:${IG_SESSION_PATH:-/app/ig-session}:ro
- /etc/secrets/yt-cookies.txt:${YT_COOKIES_PATH:-/app/yt-cookies.txt}:rw

View File

@ -8,6 +8,7 @@ use crate::{
use futures::{StreamExt, stream};
use std::{
cmp::min,
env,
ffi::OsStr,
fs::{self, metadata},
path::{Path, PathBuf},
@ -109,7 +110,14 @@ async fn run_command_in_tempdir(cmd: &str, args: &[&str]) -> Result<DownloadResu
///
/// - Propagates `run_command_in_tempdir` errors.
pub async fn download_instaloader(shortcode: &str) -> Result<DownloadResult> {
fn get_env_var(name: &str) -> Result<String> {
env::var(name).map_err(|_| Error::env(name))
}
let session_file = get_env_var("IG_SESSION_PATH")?;
let args = [
"--sessionfile",
&session_file,
"--dirname-pattern=.",
"--no-metadata-json",
"--no-compress-json",
@ -138,6 +146,8 @@ pub async fn download_ytdlp<P: AsRef<Path>>(
"%(title)s.%(ext)s",
"--no-warnings",
"--quiet",
"--postprocessor-args",
"ffmpeg:-vf setsar=1 -c:v libx264 -crf 20 -preset veryfast -c:a aac -b:a 128k -movflags +faststart",
];
let mut args = base_args

View File

@ -26,8 +26,8 @@ pub enum Error {
#[error("join error: {0}")]
Join(#[from] tokio::task::JoinError),
#[error("rate limit exceeded")]
RateLimit,
#[error("environment variable `{0}` not found")]
EnvNotFound(String),
#[error("other: {0}")]
Other(String),
@ -53,6 +53,11 @@ impl Error {
pub fn validation_falied(text: impl Into<String>) -> Self {
Self::ValidationFailed(text.into())
}
#[inline]
pub fn env(text: impl Into<String>) -> Self {
Self::EnvNotFound(text.into())
}
}
pub type Result<T> = std::result::Result<T, Error>;