diff options
Diffstat (limited to 'chemist.cpp')
-rw-r--r-- | chemist.cpp | 63 |
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 | ||
10 | int main(int argc, char** argv) | 11 | int 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 | } |