fb_poster 0.1.9

An unofficial Rust API client for Facebook post uploads.
Documentation
An unofficial Rust API client for [Facebook](https://facebook.com/) post uploads.

## 🪛 Requirements


- Create a Fecebook app on [Developer Page]https://developers.facebook.com/

- Your Facebook app must be in Live mode to make your posts visible for others.

- Take ACCESS_TOKEN from [Graph API Explorer]https://developers.facebook.com/tools/explorer/.
You can get 2 months token by pressing info icon.

- Add the desired permissions to allow your app to make posts.
    - ```pages_manage_engagement```
    - ```pages_manage_posts```
    - ```pages_read_engagement```
    - ```pages_read_user_engagement```
    - ```publish_video``` permission, if you need to publish a video

- Take PAGE_ID from page that you planning to do post.

- More useful information you can find in [Offical Facebook API Documentation]https://developers.facebook.com/docs/graph-api/
Current version v19.0.

## 🪧 Usage


### Post


```rust
use fb_poster::*;
use anyhow::{Ok, Result};

const ACCESS_TOKEN: &str = "YOUR_ACCESS_TOKEN";
const PAGE_ID: &str = "YOUR_PAGE_ID";


#[tokio::main]

async fn main() -> Result<()> {
    // Bring your secrets into a scope
    let secrets = Secrets::new(ACCESS_TOKEN, PAGE_ID);

    
    let message = "Your message".to_string();
    let link = "https://your_link".to_string();

    // Build a body for a request
    let body = Post::new(secrets)
    .with_message(message)
    .with_link(link);

    // Sending and get repsonse
    body.send().await?;

    Ok(())
}
```

### Photo


```rust
use fb_poster::*;
use anyhow::{Ok, Result};

const ACCESS_TOKEN: &str = "YOUR_ACCESS_TOKEN";
const PAGE_ID: &str = "YOUR_PAGE_ID";


#[tokio::main]

async fn main() -> Result<()> {
    // Bring your secrets into a scope
    let secrets = Secrets::new(ACCESS_TOKEN, PAGE_ID);

    let path = "/path/to/photo.png".to_string();

    // Build a body for a request
    let body = Photo::new(secrets, path);

    // Sending and get repsonse
    body.send(&secrets).await?;

    Ok(())
}
```

### Video


```rust
use fb_poster::*;
use anyhow::{Ok, Result};

const ACCESS_TOKEN: &str = "YOUR_ACCESS_TOKEN";
const PAGE_ID: &str = "YOUR_PAGE_ID";


#[tokio::main]

async fn main() -> Result<()> {
    // Bring your secrets into a scope
    let secrets = Secrets::new(ACCESS_TOKEN, PAGE_ID);


    let path = "/path/to/video".to_string(); // or url for .hosted_video()
    let title = "Title".to_string();
    let description = "Description".to_string();
    let thumb = "path/to/thumb".to_string();

    // Build a body for a request
    let body = Video::new(secrets)
    .local_video(path)
    .with_title(title)
    .with_description(description)
    .with_thumbnail(thumb)


    // Sending and get repsonse
    body.send().await?;

    Ok(())
}
```

### Reels


```rust
use fb_poster::*;
use anyhow::{Ok, Result};

const ACCESS_TOKEN: &str = "YOUR_ACCESS_TOKEN";
const PAGE_ID: &str = "YOUR_PAGE_ID";


#[tokio::main]

async fn main() -> Result<()> {
    // Bring your secrets into a scope
    let secrets = Secrets::new(ACCESS_TOKEN, PAGE_ID);


    let path = "/path/to/video".to_string(); // or url for .hosted_video()
    let title = "Title".to_string();
    let description = "Description".to_string();
    let thumb = "path/to/thumb".to_string();

    // Build a body for a request
    let body = Reels::new(secrets)
    .local_video(path)
    .with_description(description)

    // Sending and get repsonse
    body.send().await?;

    Ok(())
}
```

## ✅ Features


- [x] Post
  - [x] With Message
  - [x] With Link
- [x] Photo
  - [x] With Message

**Non-Resumable Upload (Video limitation is 1GB 20min)**

- [x] Video
  - [x] Local Video
  - [x] Hosted Video
  - [x] With Title
  - [x] With Description
  - [x] With Thumbnail

- [x] Reels
  - [x] Local Reels
  - [x] Hosted Reels
  - [x] With Description