Skip to content

Instantly share code, notes, and snippets.

@thejpster
Created September 30, 2023 15:32
Show Gist options
  • Save thejpster/977f144e01f4acd8db460df3efbf0803 to your computer and use it in GitHub Desktop.
Save thejpster/977f144e01f4acd8db460df3efbf0803 to your computer and use it in GitHub Desktop.
Tweet Media Fixer
fn main() -> Result<(), anyhow::Error> {
println!("Hello, world!");
let f = std::fs::File::open("mytweets.json")?;
let bf = std::io::BufReader::new(f);
println!("Parsing...");
let all_tweets: Vec<serde_json::Value> = serde_json::from_reader(bf)?;
println!("Got {} items", all_tweets.len());
let mut tweet_info = Vec::new();
for item in all_tweets {
let tweet = &item["tweet"];
// Thu May 05 09:08:32 +0000 2022
let dtraw = tweet["created_at"].as_str().unwrap();
let tweet_id = tweet["id"].as_str().unwrap().to_owned();
let Ok(dt) = chrono::DateTime::parse_from_str(dtraw, "%a %b %e %T %z %Y") else {
println!("Bad date {:?}", tweet["created_at"]);
continue;
};
tweet_info.push((dt, tweet_id));
}
tweet_info.sort_by_key(|item| item.0);
for tweet in tweet_info {
println!("{tweet:?}");
let glob_str = format!("../data/tweets_media/{}-*.*", tweet.1);
for entry in glob::glob(&glob_str).unwrap() {
let entry = entry.unwrap();
println!("Setting {} to {}", entry.display(), tweet.0);
filetime::set_file_mtime(entry, filetime::FileTime::from_unix_time(tweet.0.timestamp(), tweet.0.timestamp_subsec_nanos())).unwrap();
}
}
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment