Rust + Google 스프레드시트 API 빠른 시작

12661 단어 rustapigooglecloud
Google Sheets API는 매우 유용한 도구입니다. MVP 및 프로토타입의 경우 SQL 설정이 필요 없고 상호 작용할 수 있는 매우 강력한 데이터베이스 프론트엔드(구글 시트)가 있어 훌륭하게 작동합니다.

최근에 저는 Rust를 배우고 있으며 Rust를 사용하여 Sheets API로 작업하고 싶었습니다.

슬프게도 시트 문서에는 Rust에 대한 빠른 시작이 언급되어 있지 않습니다.

따라서 이 게시물에서는 Rust에서 Sheets API를 사용하는 방법을 배우게 됩니다.

cargo new sheets_api_rust

Cargo.toml는 다음과 같아야 합니다.

[package]
name = "sheets_api_rust"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
google-sheets4 = "*"
hyper = "^0.14"
hyper-rustls = "^0.22"
serde = "^1.0"
serde_json = "^1.0"
yup-oauth2 = "^5.0"
tokio = { version = "~1.2", features = [
    "macros",
    "io-util",
    "rt",
    "rt-multi-thread",
    "fs",
] }


Google에서 api keys을 가져옵니다.

귀하의 credentials.json는 다음과 같아야 합니다.

{
  "installed": {
    "client_id": "384278056379-tr5pbot1mil66749n639jo54i4840u77.apps.googleusercontent.com",
    "project_id": "sanguine-rhythm-105020",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://accounts.google.com/o/oauth2/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "QeQUnhzsiO4t--ZGmj9muUAu",
    "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"]
  }
}


그리고 마침내 당신의 main.rs
// This is a modified version of the example at:
// https://github.com/Byron/google-apis-rs/tree/main/gen/sheets4

extern crate google_sheets4 as sheets4;
extern crate hyper;
extern crate hyper_rustls;
extern crate yup_oauth2 as oauth2;
use sheets4::Error;
use sheets4::Sheets;

#[tokio::main]
async fn main() {
    // Get an ApplicationSecret instance by some means. It contains the `client_id` and
    // `client_secret`, among other things.
    let secret = yup_oauth2::read_application_secret("clientsecret.json")
        .await
        .expect("client secret could not be read");

    // Instantiate the authenticator. It will choose a suitable authentication flow for you,
    // unless you replace  `None` with the desired Flow.
    // Provide your own `AuthenticatorDelegate` to adjust the way it operates and get feedback about
    // what's going on. You probably want to bring in your own `TokenStorage` to persist tokens and
    // retrieve them from storage.
    let auth = yup_oauth2::InstalledFlowAuthenticator::builder(
        secret,
        yup_oauth2::InstalledFlowReturnMethod::HTTPRedirect,
    )
    .persist_tokens_to_disk("tokencache.json")
    .build()
    .await
    .unwrap();

    let hub = Sheets::new(
        hyper::Client::builder().build(hyper_rustls::HttpsConnector::with_native_roots()),
        auth,
    );

    let result = hub
        .spreadsheets()
        .get("1TWUpZdjXiquf-LsfbqXEIBVWgZ12XeaZtzrNp3uaHX8") // your spreadsheet id enters here
        .doit()
        .await;

    // println!("{:?}",result);
    match result {
        Err(e) => match e {
            // The Error enum provides details about what exactly happened.
            // You can also just use its `Debug`, `Display` or `Error` traits
            Error::HttpError(_)
            | Error::Io(_)
            | Error::MissingAPIKey
            | Error::MissingToken(_)
            | Error::Cancelled
            | Error::UploadSizeLimitExceeded(_, _)
            | Error::Failure(_)
            | Error::BadRequest(_)
            | Error::FieldClash(_)
            | Error::JsonDecodeError(_, _) => println!("{}", e),
        },
        Ok(res) => println!("Success: {:?}", res),
    }
}


붐, 이제 sheets4 docs을 탐색하여 더 많은 작업을 수행할 수 있습니다!

참고문헌


  • https://github.com/Byron/google-apis-rs/tree/main/gen/sheets4
  • https://github.com/dermesser/yup-oauth2/tree/master/examples/drive_example
  • 좋은 웹페이지 즐겨찾기