Skip to content

Instantly share code, notes, and snippets.

@tumugin
Created January 1, 2017 14:09
Show Gist options
  • Save tumugin/72d4ee7839a8d9662db6565927d48840 to your computer and use it in GitHub Desktop.
Save tumugin/72d4ee7839a8d9662db6565927d48840 to your computer and use it in GitHub Desktop.
using Microsoft.Office.Interop.Access.Dao;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tweetinvi;
using Tweetinvi.Parameters;
namespace CosplayUploader
{
class CosplayUploader
{
class Cosplayer
{
public String cosName;
public String characterName;
public String twitterID;
}
static List<Cosplayer> getCosplayers(String cosname, String character, String twitter)
{
List<Cosplayer> rcos = new List<Cosplayer>();
String[] characters = character.Split(',');
String[] cosnames = cosname.Split(',');
String[] twitterIDs = twitter.Split(',');
foreach (var s in cosnames)
{
rcos.Add(new Cosplayer()
{
cosName = s,
characterName = characters[Array.IndexOf(cosnames, s)],
twitterID = twitterIDs[Array.IndexOf(cosnames, s)]
});
}
return rcos;
}
static void Main(string[] args)
{
//auth twitter
var creds = new Tweetinvi.Models.TwitterCredentials("hoge", "hoge", "hoge", "hoge");
var twitter = Tweetinvi.User.GetAuthenticatedUser(creds);
//connect to MS Access
DBEngine engine = new DBEngine();
Database db = engine.OpenDatabase(@"C:\Users\kazuki\Documents\comike91.accdb");
Recordset rs = db.OpenRecordset("SELECT * FROM Cosplay WHERE uploadOK = FALSE;");
while (!rs.EOF)
{
int ID = rs.Fields["ID"].Value;
String cosName = rs.Fields["cosName"].Value.ToString();
String twitterID = rs.Fields["twitterID"].Value.ToString();
String character = rs.Fields["character"].Value.ToString();
int day = rs.Fields["day"].Value;
String message = rs.Fields["message"].Value.ToString();
//build tweet text
List<Cosplayer> layers = getCosplayers(cosName, character, twitterID);
String tweetText = $"【C91コスプレ {day}日目】\n";
foreach (var layer in layers)
{
tweetText += $"{layer.characterName}:{layer.cosName}さん(@{layer.twitterID})\n";
}
tweetText += $"\n{message}\n#C91コスプレ";
Trace.WriteLine(tweetText);
//image files
List<Tweetinvi.Models.IMedia> mediaList = new List<Tweetinvi.Models.IMedia>();
Recordset files = rs.Fields["file"].Value;
while (!files.EOF)
{
Trace.WriteLine("Uploading image....");
byte[] blob = files.Fields["FileData"].Value;
MemoryStream mems = new MemoryStream();
//DO NOT LOAD FIRST 20bytes!! IT'S NOT JPEG DATA
mems.Write(blob, 20, blob.Length - 20);
Auth.ExecuteOperationWithCredentials(creds, () =>
{
var media = Upload.UploadImage(mems.ToArray());
mediaList.Add(media);
});
Trace.WriteLine("Upload OK!!");
files.MoveNext();
}
Trace.WriteLine("Sending tweet....");
Auth.ExecuteOperationWithCredentials(creds, () =>
{
var tweet = Tweet.PublishTweet(tweetText, new PublishTweetOptionalParameters
{
Medias = mediaList
});
});
Trace.WriteLine("Tweet OK!");
//db.ExecuteSQL($"UPDATE Cosplay SET uploadOK = TRUE WHERE ID = {ID};");
rs.MoveNext();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment