Created
January 1, 2017 14:09
-
-
Save tumugin/72d4ee7839a8d9662db6565927d48840 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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