about summary refs log tree commit diff stats
path: root/nancy.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2016-03-17 14:37:47 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2016-03-17 14:37:47 -0400
commit1b78c44442cd578bad394bf6cbfabd4af637ca4b (patch)
treeda3b4fa5b486515620518918cc13139389048e4b /nancy.cpp
parentbe38bfeda5b4970b22454ec60f26c326395818ae (diff)
downloadnancy-1b78c44442cd578bad394bf6cbfabd4af637ca4b.tar.gz
nancy-1b78c44442cd578bad394bf6cbfabd4af637ca4b.tar.bz2
nancy-1b78c44442cd578bad394bf6cbfabd4af637ca4b.zip
Updated to use verbly
Diffstat (limited to 'nancy.cpp')
-rw-r--r--nancy.cpp88
1 files changed, 36 insertions, 52 deletions
diff --git a/nancy.cpp b/nancy.cpp index 3605f71..00c68c5 100644 --- a/nancy.cpp +++ b/nancy.cpp
@@ -1,16 +1,34 @@
1#include <yaml-cpp/yaml.h> 1#include <yaml-cpp/yaml.h>
2#include <iostream> 2#include <iostream>
3#include <mysql/mysql.h>
4#include <cstdlib> 3#include <cstdlib>
5#include <ctime> 4#include <ctime>
6#include <sstream> 5#include <sstream>
7#include <twitcurl.h> 6#include <twitcurl.h>
8#include <unistd.h> 7#include <unistd.h>
8#include <verbly.h>
9 9
10int db_error(MYSQL* driver, const char* error) 10std::string capitalize(std::string input)
11{ 11{
12 std::cout << error << ": " << mysql_error(driver) << std::endl; 12 std::string result;
13 return 1; 13 bool capnext = true;
14
15 for (auto ch : input)
16 {
17 if (capnext)
18 {
19 result += toupper(ch);
20 capnext = false;
21 } else {
22 result += ch;
23 }
24
25 if ((ch == ' ') || (ch == '-'))
26 {
27 capnext = true;
28 }
29 }
30
31 return result;
14} 32}
15 33
16int main(int argc, char** argv) 34int main(int argc, char** argv)
@@ -18,10 +36,6 @@ int main(int argc, char** argv)
18 srand(time(NULL)); 36 srand(time(NULL));
19 37
20 YAML::Node config = YAML::LoadFile("config.yml"); 38 YAML::Node config = YAML::LoadFile("config.yml");
21 const char* host = config["host"].as<std::string>().c_str();
22 const char* user = config["user"].as<std::string>().c_str();
23 const char* pass = config["pass"].as<std::string>().c_str();
24 const char* db = config["db"].as<std::string>().c_str();
25 39
26 // Forms 40 // Forms
27 std::vector<std::string> forms; 41 std::vector<std::string> forms;
@@ -50,13 +64,10 @@ int main(int argc, char** argv)
50 return 2; 64 return 2;
51 } 65 }
52 66
53 // WordNet data 67 // verbly
54 MYSQL* driver = mysql_init(NULL); 68 verbly::data database("data.sqlite3");
55 if (!mysql_real_connect(driver, host, user, pass, db, 0, NULL, 0))
56 {
57 return db_error(driver, "Error connecting to database");
58 }
59 69
70 // Twitter
60 twitCurl twitter; 71 twitCurl twitter;
61 twitter.getOAuth().setConsumerKey(config["consumer_key"].as<std::string>()); 72 twitter.getOAuth().setConsumerKey(config["consumer_key"].as<std::string>());
62 twitter.getOAuth().setConsumerSecret(config["consumer_secret"].as<std::string>()); 73 twitter.getOAuth().setConsumerSecret(config["consumer_secret"].as<std::string>());
@@ -73,50 +84,25 @@ int main(int argc, char** argv)
73 int i; 84 int i;
74 while ((i = form.find("{adj}")) != std::string::npos) 85 while ((i = form.find("{adj}")) != std::string::npos)
75 { 86 {
76 const char* getword = "SELECT word FROM wn_synset WHERE ss_type = 'a' OR ss_type = 's' ORDER BY RAND() LIMIT 1"; 87 verbly::adjective adj = database.adjectives().random(true).limit(1).run().front();
77 if (mysql_query(driver, getword)) return db_error(driver, "Query failed"); 88 form.replace(i, 5, capitalize(adj.base_form()));
78 MYSQL_RES* getword2 = mysql_use_result(driver); if (getword2 == NULL) return db_error(driver, "Query failed");
79 MYSQL_ROW getword3 = mysql_fetch_row(getword2); if (getword3 == NULL) return db_error(driver, "Query failed");
80 std::string adj {getword3[0]};
81 mysql_free_result(getword2);
82
83 adj[0] = toupper(adj[0]);
84
85 int j;
86 while ((j = adj.find("_")) != std::string::npos)
87 {
88 adj[j] = ' ';
89 adj[j+1] = toupper(adj[j+1]);
90 }
91
92 if (adj[adj.size()-1] == ')')
93 {
94 adj.resize(adj.size()-3);
95 }
96
97 form.replace(i, 5, adj);
98 } 89 }
99 90
100 // Nouns 91 // Nouns
101 while ((i = form.find("{noun}")) != std::string::npos) 92 while ((i = form.find("{noun}")) != std::string::npos)
102 { 93 {
103 const char* getword = "SELECT word FROM wn_synset WHERE ss_type = 'n' ORDER BY RAND() LIMIT 1"; 94 std::string nf;
104 if (mysql_query(driver, getword)) return db_error(driver, "Query failed"); 95 for (;;)
105 MYSQL_RES* getword2 = mysql_use_result(driver); if (getword2 == NULL) return db_error(driver, "Query failed");
106 MYSQL_ROW getword3 = mysql_fetch_row(getword2); if (getword3 == NULL) return db_error(driver, "Query failed");
107 std::string noun {getword3[0]};
108 mysql_free_result(getword2);
109
110 noun[0] = toupper(noun[0]);
111
112 int j;
113 while ((j = noun.find("_")) != std::string::npos)
114 { 96 {
115 noun[j] = ' '; 97 verbly::noun n = database.nouns().is_not_proper(true).random(true).limit(1).run().front();
116 noun[j+1] = toupper(noun[j+1]); 98 if (n.singular_form().find("genus") == std::string::npos)
99 {
100 nf = n.singular_form();
101 break;
102 }
117 } 103 }
118 104
119 form.replace(i, 6, noun); 105 form.replace(i, 6, capitalize(nf));
120 } 106 }
121 107
122 if (form.size() > 140) 108 if (form.size() > 140)
@@ -137,6 +123,4 @@ int main(int argc, char** argv)
137 std::cout << "Waiting" << std::endl; 123 std::cout << "Waiting" << std::endl;
138 sleep(60 * 60 * 3); 124 sleep(60 * 60 * 3);
139 } 125 }
140
141 mysql_close(driver);
142} 126}