Compare commits

...

5 Commits

Author SHA1 Message Date
479d2623e6 change auth token header!
Google api docs LIED!
2026-04-20 08:06:12 +02:00
a3caa0ebfa I may be stupid 2026-04-20 08:06:05 +02:00
381560eef8 remove useless import 2026-04-13 10:49:52 +02:00
001b6f660c feat: construct request function
wow a helper function
changed get_live_id to private
2026-04-13 10:49:01 +02:00
6f243e3485 move request construction to grpc.rs 2026-04-13 10:46:57 +02:00
6 changed files with 37 additions and 15 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use nix

1
.gitignore vendored
View File

@@ -1 +1,2 @@
/target
/.direnv/

10
shell.nix Normal file
View File

@@ -0,0 +1,10 @@
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
mkShell {
buildInputs = [
protobuf
rustup
];
}

View File

@@ -1,12 +1,13 @@
use std::process::Command;
use tonic::{metadata::MetadataValue, Request, Status};
use stream_list::{v3_data_live_chat_message_service_client::V3DataLiveChatMessageServiceClient, LiveChatMessageListRequest};
use tonic::{metadata::MetadataValue, service::interceptor::InterceptedService, transport::Channel, Request, Status};
pub mod stream_list {
tonic::include_proto!("youtube.api.v3");
}
pub fn get_live_id(channel: String) -> String {
fn get_live_id(channel: String) -> String {
let video_id = Command::new("./get_url.sh")
.arg(channel)
.output()
@@ -16,15 +17,27 @@ pub fn get_live_id(channel: String) -> String {
}
pub fn auth_header(mut req: Request<()>) -> Result<Request<()>, Status> {
let token: MetadataValue<_> = "Bearer my-secret-token"
let oauth_token = "Yeah!".to_string();
let token: MetadataValue<_> = format!("Bearer {}", oauth_token)
.parse()
.expect("failed to parse token");
req.metadata_mut()
.insert("x-goog-api-key", token)
.insert("authorization", token)
.expect("WHAT");
Ok(req)
}
pub fn construct_request(channel: String) -> Request<LiveChatMessageListRequest>{
let request = Request::new(LiveChatMessageListRequest {
part: vec!["snippet".to_string()],
live_chat_id: Some(get_live_id(channel)),
max_results: Some(20),
page_token: None,
hl: None,
profile_image_size: None,
});
request
}
#[test]
fn test_get_live_id() {

View File

@@ -1,8 +1,8 @@
use tonic::{Request, transport::Channel};
use tonic::{transport::Channel};
use grpc::stream_list::{
v3_data_live_chat_message_service_client::V3DataLiveChatMessageServiceClient, LiveChatMessageListRequest
v3_data_live_chat_message_service_client::V3DataLiveChatMessageServiceClient
};
use grpc::{auth_header, get_live_id};
use grpc::{auth_header, construct_request};
mod grpc;
#[tokio::main]
@@ -12,14 +12,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.await?;
let mut client = V3DataLiveChatMessageServiceClient::with_interceptor(channel, auth_header);
let request = Request::new(LiveChatMessageListRequest {
part: vec!["snippet".to_string()],
live_chat_id: Some(get_live_id(String::from("linlyboi"))),
max_results: Some(20),
page_token: None,
hl: None,
profile_image_size: None,
});
let request = construct_request(String::from("linlyboi"));
let response = client.stream_list(request).await?;

4
todo.org Normal file
View File

@@ -0,0 +1,4 @@
* Inbox
** TODO use .env here LOL
[[file:~/Code/youtube-chat-rs/src/grpc.rs::let oauth_token = "Yeah!".to_string();]]