about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.gitmodules3
-rw-r--r--CMakeLists.txt12
-rw-r--r--furries.cpp191
m---------vendor/twitcurl0
5 files changed, 207 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9abc7f --- /dev/null +++ b/.gitignore
@@ -0,0 +1 @@
config.yml \ No newline at end of file
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..037e2c6 --- /dev/null +++ b/.gitmodules
@@ -0,0 +1,3 @@
1[submodule "vendor/twitcurl"]
2 path = vendor/twitcurl
3 url = https://github.com/swatkat/twitcurl
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e1ff59b --- /dev/null +++ b/CMakeLists.txt
@@ -0,0 +1,12 @@
1cmake_minimum_required (VERSION 2.6)
2project (furries)
3
4add_subdirectory(vendor/twitcurl/libtwitcurl)
5
6find_package(PkgConfig)
7pkg_check_modules(YamlCpp yaml-cpp REQUIRED)
8pkg_check_modules(mysqlclient mysqlclient REQUIRED)
9
10include_directories(${mysqlclient_INCLUDE_DIRS} vendor/twitcurl/libtwitcurl)
11add_executable(furries furries.cpp)
12target_link_libraries(furries ${YamlCpp_LIBRARIES} ${mysqlclient_LIBRARIES} twitcurl curl)
diff --git a/furries.cpp b/furries.cpp new file mode 100644 index 0000000..94d0e71 --- /dev/null +++ b/furries.cpp
@@ -0,0 +1,191 @@
1#include <yaml-cpp/yaml.h>
2#include <iostream>
3#include <mysql.h>
4#include <cstdlib>
5#include <ctime>
6#include <sstream>
7#include <twitcurl.h>
8
9int db_error(MYSQL* driver, const char* error)
10{
11 std::cout << error << ": " << mysql_error(driver) << std::endl;
12 return 1;
13}
14
15int main(int argc, char** argv)
16{
17 srand(time(NULL));
18
19 YAML::Node config = YAML::LoadFile("config.yml");
20 const char* host = config["host"].as<std::string>().c_str();
21 const char* user = config["user"].as<std::string>().c_str();
22 const char* pass = config["pass"].as<std::string>().c_str();
23 const char* db = config["db"].as<std::string>().c_str();
24
25 MYSQL* driver = mysql_init(NULL);
26 if (!mysql_real_connect(driver, host, user, pass, db, 0, NULL, 0))
27 {
28 return db_error(driver, "Error connecting to database");
29 }
30
31 twitCurl twitter;
32 twitter.getOAuth().setConsumerKey(config["consumer_key"].as<std::string>());
33 twitter.getOAuth().setConsumerSecret(config["consumer_secret"].as<std::string>());
34 twitter.getOAuth().setOAuthTokenKey(config["access_key"].as<std::string>());
35 twitter.getOAuth().setOAuthTokenSecret(config["access_secret"].as<std::string>());
36
37 for (;;)
38 {
39 std::cout << "Generating tweet" << std::endl;
40
41 std::stringstream output;
42 output << "the furries are ";
43
44 //if (rand() % 2 == 0)
45 {
46 // Adverb(s) + Adjective
47 while (rand() % 4 == 0)
48 {
49 const char* getadverb = "SELECT ss1.word FROM wn_pertainym INNER JOIN wn_synset AS ss1 ON wn_pertainym.synset_id_1 = ss1.synset_id AND wn_pertainym.wnum_1 = ss1.w_num INNER JOIN wn_synset AS ss2 ON wn_pertainym.synset_id_2 = ss2.synset_id AND wn_pertainym.wnum_2 = ss2.w_num WHERE ss1.ss_type = 'r' ORDER BY RAND() LIMIT 1";
50 if (mysql_query(driver, getadverb)) return db_error(driver, "Query failed");
51 MYSQL_RES* getadverb2 = mysql_use_result(driver); if (getadverb2 == NULL) return db_error(driver, "Query failed");
52 MYSQL_ROW getadverb3 = mysql_fetch_row(getadverb2); if (getadverb3 == NULL) return db_error(driver, "Query failed");
53 output << getadverb3[0] << " ";
54 mysql_free_result(getadverb2);
55 }
56
57 const char* getword = "SELECT word FROM wn_synset WHERE ss_type = 'a' OR ss_type = 's' ORDER BY RAND() LIMIT 1";
58 if (mysql_query(driver, getword)) return db_error(driver, "Query failed");
59 MYSQL_RES* getword2 = mysql_use_result(driver); if (getword2 == NULL) return db_error(driver, "Query failed");
60 MYSQL_ROW getword3 = mysql_fetch_row(getword2); if (getword3 == NULL) return db_error(driver, "Query failed");
61 output << getword3[0];
62 mysql_free_result(getword2);
63 } /*else {
64 // Verb phrase
65 const char* getword = "SELECT word FROM wn_synset WHERE ss_type = 'a ' OR ss_type = 's' ORDER BY RAND() LIMIT 1";
66 if (mysql_query(driver, getword)) return db_error(driver, "Query failed");
67 MYSQL_RES* getword2 = mysql_use_result(driver); if (getword2 == NULL) return db_error(driver, "Query failed");
68 MYSQL_ROW getword3 = mysql_fetch_row(getword2); if (getword3 == NULL) return db_error(driver, "Query failed");
69 }
70
71
72
73
74 if (rand() % 2 == 0)
75 {
76 std::stringstream ispart;
77 ispart << "SELECT wn_verb_frame.f_num FROM wn_participle INNER JOIN wn_verb_frame ON wn_verb_frame.synset_id_1 = synset_id_2 AND (wn_verb_frame.w_num = wnum_2 OR wn_verb_frame.w_num = 0) WHERE wn_participle.synset_id_1 = " << wordssid << " AND wn_participle.wnum_1 = " << wordnum;
78 if (mysql_query(driver, ispart.str().c_str())) return db_error(driver, "Query failed");
79 MYSQL_RES* ispart2 = mysql_use_result(driver); if (ispart2 == NULL) return db_error(driver, "Query failed");
80 MYSQL_ROW ispart3 = mysql_fetch_row(ispart2);
81 mysql_free_result(ispart2);
82
83 if (ispart3 != NULL)
84 {
85 int frame = atoi(ispart3[0]);
86 std::cout << "frame " << frame << std::endl;
87
88 if (frame == 4 || frame == 22)
89 {
90 // the furries are ----ing *prepositional phrase*
91 // ex: the furries are laughing over there
92 } else if (frame == 5)
93 {
94 // the furries are ----ing something *adj/n*
95 // ex: the furries are regarding life inconsequential
96 } else if (frame == 6 || frame == 7)
97 {
98 // the furries are ----ing *adj/n*
99 // ex: the furries are turning gay
100 } else if (frame == 8 || frame == 9 || frame == 10 || frame == 11)
101 {
102 // the furries are ----ing something/somebody
103 // ex: the furries are holding hostages
104 } else if (frame == 12 || frame == 27)
105 {
106 // the furries are ----ing to somebody
107 // ex: the furries are appealing to God
108 } else if (frame == 13)
109 {
110 // the furries are ----ing on something
111 // ex: the furries are lecturing on heterosexuality
112 } else if (frame == 14)
113 {
114 // the furries are ----ing somebody something
115 // ex: the furries are reading your mom the menu
116 } else if (frame == 15)
117 {
118 // the furries are ----ing something to somebody
119 // ex: the furries are pitching a product to Apple
120 } else if (frame == 16)
121 {
122 // the furries are ----ing something from somebody
123 // ex: the furries are separating your money from you
124 } else if (frame == 17)
125 {
126 // the furries are ----ing somebody with something
127 // ex: the furries are injecting me with solemnity
128 } else if (frame == 18)
129 {
130 // the furries are ----ing somebody of something
131 // ex: the furries are depriving me of hope
132 } else if (frame == 19)
133 {
134 // the furries are ----ing something on somebody
135 // ex: the furries are forcing pervision on us
136 } else if (frame == 20 || frame == 21)
137 {
138 // the furries are ----ing somebody/something *prepositional phrase*
139 // ex: the furries are leaving us behind
140 } else if (frame == 24)
141 {
142 // the furries are ----ing somebody to INF
143 // ex: the furries are getting us to eat
144 } else if (frame == 25)
145 {
146 // the furries are ----ing somebody INF
147 // ex: the furries are making us procreate
148 } else if (frame == 26)
149 {
150 // the furries are ----ing that CLAUSE
151 // ex: the furries are understaing that life is precious
152 } else if (frame == 28)
153 {
154 // the furries are ----ing to INF
155 // ex: the furries are beginning to understand
156 } else if (frame == 29)
157 {
158 // the furries are ----ing whether to INF
159 // ex: the furries are deciding whether to hallucinate
160 } else if (frame == 30)
161 {
162 // the furries are ----ing somebody into V-ing something
163 // ex: the furries are tempting me into consecrating a magnet
164 } else if (frame == 31)
165 {
166 // the furries are ----ing something with something
167 // ex: the furries are replacing existence with solidarity
168 }
169 }
170 }
171 */
172
173 std::string result = output.str();
174 result.resize(140);
175
176 std::string replyMsg;
177 if (twitter.statusUpdate(result))
178 {
179 twitter.getLastWebResponse(replyMsg);
180 std::cout << "Twitter message: " << replyMsg << std::endl;
181 } else {
182 twitter.getLastCurlError(replyMsg);
183 std::cout << "Curl error: " << replyMsg << std::endl;
184 }
185
186 std::cout << "Waiting" << std::endl;
187 sleep(60 * 60 * 3);
188 }
189
190 mysql_close(driver);
191}
diff --git a/vendor/twitcurl b/vendor/twitcurl new file mode 160000
Subproject 6659e86de7481e50977b7569c75138f7f69ad3c