summary refs log tree commit diff stats
path: root/chemist.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2016-10-20 08:58:20 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2016-10-20 08:58:20 -0400
commit9ab9e5fcbc1534111d74c688bf7ad6d6ad46ff2b (patch)
treeaae2c4d60588f32c94c7367df0b35664e468f86b /chemist.cpp
parent4dade1b6f4f2b37a7ae9e6b1f7ca28e880fd7098 (diff)
downloadinsult-9ab9e5fcbc1534111d74c688bf7ad6d6ad46ff2b.tar.gz
insult-9ab9e5fcbc1534111d74c688bf7ad6d6ad46ff2b.tar.bz2
insult-9ab9e5fcbc1534111d74c688bf7ad6d6ad46ff2b.zip
Switched from twitcurl to libtwitter++
Also updated verbly, switched from C random interface to C++ random
interface, and reworked the datafile to give the generated tweets a
different feel.
Diffstat (limited to 'chemist.cpp')
-rw-r--r--chemist.cpp63
1 files changed, 39 insertions, 24 deletions
diff --git a/chemist.cpp b/chemist.cpp index fbf83a8..8b00d12 100644 --- a/chemist.cpp +++ b/chemist.cpp
@@ -1,23 +1,24 @@
1#include <yaml-cpp/yaml.h> 1#include <yaml-cpp/yaml.h>
2#include <iostream> 2#include <iostream>
3#include <cstdlib>
4#include <ctime>
5#include <sstream> 3#include <sstream>
6#include <twitcurl.h>
7#include <verbly.h> 4#include <verbly.h>
8#include <unistd.h> 5#include <fstream>
6#include <twitter.h>
7#include <random>
8#include <chrono>
9#include <thread>
9 10
10int main(int argc, char** argv) 11int main(int argc, char** argv)
11{ 12{
12 srand(time(NULL));
13
14 YAML::Node config = YAML::LoadFile("config.yml"); 13 YAML::Node config = YAML::LoadFile("config.yml");
15 14
16 twitCurl twitter; 15 twitter::auth auth;
17 twitter.getOAuth().setConsumerKey(config["consumer_key"].as<std::string>()); 16 auth.setConsumerKey(config["consumer_key"].as<std::string>());
18 twitter.getOAuth().setConsumerSecret(config["consumer_secret"].as<std::string>()); 17 auth.setConsumerSecret(config["consumer_secret"].as<std::string>());
19 twitter.getOAuth().setOAuthTokenKey(config["access_key"].as<std::string>()); 18 auth.setAccessKey(config["access_key"].as<std::string>());
20 twitter.getOAuth().setOAuthTokenSecret(config["access_secret"].as<std::string>()); 19 auth.setAccessSecret(config["access_secret"].as<std::string>());
20
21 twitter::client client(auth);
21 22
22 std::map<std::string, std::vector<std::string>> groups; 23 std::map<std::string, std::vector<std::string>> groups;
23 std::ifstream datafile("data.txt"); 24 std::ifstream datafile("data.txt");
@@ -51,6 +52,9 @@ int main(int argc, char** argv)
51 } 52 }
52 } 53 }
53 54
55 std::random_device random_device;
56 std::mt19937 random_engine{random_device()};
57
54 verbly::data database {"data.sqlite3"}; 58 verbly::data database {"data.sqlite3"};
55 for (;;) 59 for (;;)
56 { 60 {
@@ -77,6 +81,9 @@ int main(int argc, char** argv)
77 if (canontkn == "NOUN") 81 if (canontkn == "NOUN")
78 { 82 {
79 result = database.nouns().is_not_proper().random().limit(1).with_complexity(1).run().front().singular_form(); 83 result = database.nouns().is_not_proper().random().limit(1).with_complexity(1).run().front().singular_form();
84 } else if (canontkn == "ATTRIBUTE")
85 {
86 result = database.nouns().random().limit(1).full_hyponym_of(database.nouns().with_wnid(100024264).limit(1).run().front()).run().front().singular_form();
80 } else if (canontkn == "ADJECTIVE") 87 } else if (canontkn == "ADJECTIVE")
81 { 88 {
82 result = database.adjectives().with_complexity(1).random().limit(1).run().front().base_form(); 89 result = database.adjectives().with_complexity(1).random().limit(1).run().front().base_form();
@@ -85,7 +92,9 @@ int main(int argc, char** argv)
85 result = database.verbs().random().limit(1).run().front().ing_form(); 92 result = database.verbs().random().limit(1).run().front().ing_form();
86 } else if (canontkn == "YEAR") 93 } else if (canontkn == "YEAR")
87 { 94 {
88 result = std::to_string(rand() % 100 + 1916); 95 std::uniform_int_distribution<int> yeardist(1916,2015);
96 int year = yeardist(random_engine);
97 result = std::to_string(year);
89 } else if (canontkn == "REGION") 98 } else if (canontkn == "REGION")
90 { 99 {
91 auto hem1 = database.nouns().with_singular_form("eastern hemisphere").limit(1).run().front(); 100 auto hem1 = database.nouns().with_singular_form("eastern hemisphere").limit(1).run().front();
@@ -103,9 +112,14 @@ int main(int argc, char** argv)
103 { 112 {
104 auto bp = database.nouns().with_singular_form("body part").limit(1).run().front(); 113 auto bp = database.nouns().with_singular_form("body part").limit(1).run().front();
105 result = database.nouns().full_hyponym_of({bp}).with_complexity(1).random().limit(1).run().front().singular_form(); 114 result = database.nouns().full_hyponym_of({bp}).with_complexity(1).random().limit(1).run().front().singular_form();
115 } else if (canontkn == "\\N")
116 {
117 result = "\n";
106 } else { 118 } else {
107 auto group = groups[canontkn]; 119 auto group = groups[canontkn];
108 result = group[rand() % group.size()]; 120 std::uniform_int_distribution<int> groupdist(0, group.size()-1);
121 int groupind = groupdist(random_engine);
122 result = group[groupind];
109 } 123 }
110 124
111 if (modifier == "indefinite") 125 if (modifier == "indefinite")
@@ -144,18 +158,19 @@ int main(int argc, char** argv)
144 } 158 }
145 159
146 action.resize(140); 160 action.resize(140);
147 161
148 std::string replyMsg; 162 try
149 if (twitter.statusUpdate(action))
150 { 163 {
151 twitter.getLastWebResponse(replyMsg); 164 client.updateStatus(action);
152 std::cout << "Twitter message: " << replyMsg << std::endl; 165
153 } else { 166 std::cout << "Tweeted!" << std::endl;
154 twitter.getLastCurlError(replyMsg); 167 } catch (const twitter::twitter_error& e)
155 std::cout << "Curl error: " << replyMsg << std::endl; 168 {
169 std::cout << "Twitter error: " << e.what() << std::endl;
156 } 170 }
157 171
158 std::cout << "Waiting" << std::endl; 172 std::cout << "Waiting..." << std::endl;
159 sleep(60 * 60); 173
174 std::this_thread::sleep_for(std::chrono::hours(1));
160 } 175 }
161} 176}