void SetUp() {
     hash_1[0] = false;
     hash_1[1] = true;
     hash_1[2] = false;
     hash_2[0] = true;
     hash_2[1] = false;
     hash_2[2] = true;
     tweets = { Tweet("t1", hash_1), Tweet("t2", hash_2) };
 }
vector<Tweet> TweetParser::parseTweetData(const string& inputTweetDataFilename) const {
    ifstream fInp;
    vector<Tweet> parsedTweetData;
    string tweet;
    fInp.open(inputTweetDataFilename.c_str());
    if (fInp.is_open()) {
        int id = 0;
        int screenNameId = 0;
        int resetScreenNameId = 0;
        string tweetScreenName, tweetTimeStamp, tweetContent;
        vector<string> tweetMentions;
        vector<string> screenNames;
        bool incrementScreenNameId = true;
        while (!fInp.eof()) {
            getline(fInp, tweet);
            if (tweet != "") {
                try {
                    tweetScreenName = getScreenNameForSingleTweet(tweet);
                    tweetTimeStamp = getTimeStampForSingleTweet(tweet);
                    tweetContent = getContentForSingleTweet(tweet);
                    tweetMentions = getMentionsForSingleTweet(tweet);
                } catch (const char* msg) {
                    cerr << msg << endl;
                }
                vector<string>::iterator it = find(screenNames.begin(), screenNames.end(), tweetScreenName);
                // new screen name found
                if (it == screenNames.end()) {
                    screenNames.push_back(tweetScreenName);
                    incrementScreenNameId = true;
                }
                // screen name already found
                else {
                    resetScreenNameId = screenNameId;
                    screenNameId = (int) (it - screenNames.begin());
                    incrementScreenNameId = false;
                }
                parsedTweetData.push_back(Tweet(id, TwitterAccount(screenNameId, tweetScreenName), tweetTimeStamp, tweetContent, tweetMentions));
                if (incrementScreenNameId) {
                    screenNameId++;
                }
                else {
                    screenNameId = resetScreenNameId;
                }
                id++;
            }
        }
        fInp.close();
        tweetMentions.clear();
        screenNames.clear();
        cout << "######   *****   NUMBER OF TWEETS = " << parsedTweetData.size() << "   *****   ######" << endl;
        cout << "######   *****   NUMBER OF TWITTER ACCOUNTS = " << screenNameId << "   *****   ######" << endl;
        return parsedTweetData;
    }
    else {
        string message = "TweetParser::parseTweetData: error opening file: " + inputTweetDataFilename;
        throw message.c_str();
    }
}
Esempio n. 3
0
void RandomTweetTask::Entry(TaskServer &server, const std::atomic<bool> &cancel)
{
	auto twitter = system::Get().twitter;
	if (m_random_list.size() == 0) {
		return;
	}
	uint32_t random_ind = m_mt() % m_random_list.size();
	twitter.Tweet(m_random_list.at(random_ind));
}
Esempio n. 4
0
void ofxTwitter::setup() {
	
	// listen to http events
    ofAddListener(httpUtils.newResponseEvent, this, &ofxTwitter::newResponse);
    httpUtils.start();
    
	// use dummy data in case we've lost web connection
	data.push_back( Tweet("...") );
	
	delegate = NULL;
	
}
Esempio n. 5
0
void TwitterTask::Entry(TaskServer &server, const std::atomic<bool> &cancel)
{
	// 初回実行時のみ
	// 自分の最後のツイート以降でフィルタする
	if (m_since_id == 0) {
		m_since_id = GetInitialSinceId();
		logger.Log(LogLevel::Info, "Initial since_id: %" PRIu64, m_since_id);
	}

	// ホームタイムラインを取得
	auto twitter = system::Get().twitter;
	auto json = twitter.Statuses_HomeTimeline({
		{"since_id", std::to_string(m_since_id)},
		{"count", "200"}});

	auto log_tweet = [](const json11::Json &status, std::time_t timestamp) {
		logger.Log(LogLevel::Info, "id=%s time=%s local=%s screen=%s name=%s",
			status["id_str"].string_value().c_str(),
			status["created_at"].string_value().c_str(),
			util::DateTimeStr(timestamp).c_str(),
			status["user"]["screen_name"].string_value().c_str(),
			status["user"]["name"].string_value().c_str());
		logger.Log(LogLevel::Info, "%s", status["text"].string_value().c_str());
	};

	for (const auto &status : json.array_items()) {
		// ID
		uint64_t id = util::to_uint64(status["id_str"].string_value());
		// ローカルタイムに変換
		std::time_t timestamp = util::StrToTimeTwitter(
			status["created_at"].string_value());
		struct tm local;
		::localtime_r(&timestamp, &local);

		// 自分のツイートには反応しない
		if (util::to_uint64(status["id_str"].string_value()) == twitter.MyId()) {
			continue;
		}
		// リツイートには反応しない
		if (!status["retweeted_status"].is_null()) {
			continue;
		}
		if (IsWhite(status)) {
			logger.Log(LogLevel::Info, "Find White");
			log_tweet(status, timestamp);

			std::string msg = u8"@";
			msg += status["user"]["screen_name"].string_value();
			msg += ' ';
			msg += u8"ホワイト!";
			twitter.Tweet(msg, status["id_str"].string_value());

			m_since_id = std::max(id, m_since_id);
		}
		if (IsBlack(status)) {
			logger.Log(LogLevel::Info, "Find Black");
			log_tweet(status, timestamp);

			std::string msg = u8"@";
			msg += status["user"]["screen_name"].string_value();
			msg += ' ';
			msg += u8"ブラック";
			twitter.Tweet(msg, status["id_str"].string_value());

			m_since_id = std::max(id, m_since_id);
		}
	}
}
Esempio n. 6
0
void TweetValue(char *to, char *subject, int value, AsyncCallback_t callback) {
    static char message[10];
    sprintf(message, "%d", value);
    Tweet(to, subject, message, callback);
}
Esempio n. 7
0
 /** Compose a new tweet. */
 void postTweet(int userId, int tweetId) {
   tweets[userId].emplace_back(Tweet(time++, tweetId));
 }
Esempio n. 8
0
 /** Compose a new tweet. */
 void postTweet(int userId, int tweetId) {
     tweet.push_back(Tweet(userId, tweetId));
 }
Esempio n. 9
0
 /** Compose a new tweet. */
 void postTweet(int userId, int tweetId) {
     tweet[userId].push_back(Tweet(userId, tweetId, ++timestamp, tweet[userId].size()));
 }