From 9a90397f8161d9bd771a76b123883a65dd254651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Wed, 21 May 2014 13:46:45 +0000 Subject: Facebook: Pretty much fixed getting newsfeeds git-svn-id: http://svn.miranda-ng.org/main/trunk@9270 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/FacebookRM/src/communication.cpp | 19 ++++--- protocols/FacebookRM/src/constants.h | 14 +++--- protocols/FacebookRM/src/process.cpp | 81 ++++++++++++++++++++++-------- protocols/FacebookRM/src/proto.cpp | 1 + 4 files changed, 80 insertions(+), 35 deletions(-) diff --git a/protocols/FacebookRM/src/communication.cpp b/protocols/FacebookRM/src/communication.cpp index 4caf79d536..e60e333b61 100644 --- a/protocols/FacebookRM/src/communication.cpp +++ b/protocols/FacebookRM/src/communication.cpp @@ -446,12 +446,12 @@ std::string facebook_client::choose_action(RequestType request_type, std::string case REQUEST_FEEDS: { - std::string action = "/ajax/intent.php?filter="; - action += get_newsfeed_type(); - action += "&request_type=4&__a=1&newest=%s&ignore_self=true&load_newer=true&__user=%s"; - std::string newest = utils::conversion::to_string((void*)&this->last_feeds_update_, UTILS_CONV_TIME_T); + std::string action = "/ajax/home/generic.php?" + get_newsfeed_type(); + action += "&__user=" + self_.user_id + "&__a=1"; + + /*std::string newest = utils::conversion::to_string((void*)&this->last_feeds_update_, UTILS_CONV_TIME_T); utils::text::replace_first(&action, "%s", newest); - utils::text::replace_first(&action, "%s", self_.user_id); + utils::text::replace_first(&action, "%s", self_.user_id);*/ return action; } @@ -604,8 +604,13 @@ std::string facebook_client::get_newsfeed_type() { BYTE feed_type = parent->getByte(FACEBOOK_KEY_FEED_TYPE, 0); if (feed_type >= SIZEOF(feed_types)) - feed_type = 0; - return feed_types[feed_type].id; + feed_type = 0; + + std::string ret = "sk="; + ret += feed_types[feed_type].id; + ret += "&key="; + ret += (feed_type < 2 ? "nf" : feed_types[feed_type].id); + return ret; } std::string facebook_client::get_server_type() diff --git a/protocols/FacebookRM/src/constants.h b/protocols/FacebookRM/src/constants.h index 0ab83a7427..bfa54d2ec7 100644 --- a/protocols/FacebookRM/src/constants.h +++ b/protocols/FacebookRM/src/constants.h @@ -159,12 +159,14 @@ typedef struct { // News Feed types static const ttype feed_types[] = { - { LPGEN("Most Recent"), "lf_" }, //h_chr? - { LPGEN("Wall Posts"), "app_2915120374" }, - { LPGEN("Top News"), "h_nor" }, //h - { LPGEN("Photos"), "app_2305272732_2392950137" }, - { LPGEN("Links"), "app_2309869772" }, - { LPGEN("Apps and Games"), "appsandgames" }, + { LPGEN("Top News"), "h_nor" }, + { LPGEN("Most Recent"), "h_chr" }, + { LPGEN("Pages"), "pages" }, + //{ LPGEN("Apps and Games"), "FEED_FILTER_KEY_APPS_AND_GAMES" }, + + //{ LPGEN("Wall Posts"), "app_2915120374" }, + //{ LPGEN("Photos"), "app_2305272732_2392950137" }, + //{ LPGEN("Links"), "app_2309869772" }, }; // Server types diff --git a/protocols/FacebookRM/src/process.cpp b/protocols/FacebookRM/src/process.cpp index 0478857926..7b7673d2c7 100644 --- a/protocols/FacebookRM/src/process.cpp +++ b/protocols/FacebookRM/src/process.cpp @@ -748,7 +748,7 @@ void FacebookProto::ProcessFeeds(void* data) return; } - if (resp.data.empty() || resp.data.find("\"num_stories\":0") != std::string::npos) + if (resp.data.empty() /*|| resp.data.find("\"num_stories\":0") != std::string::npos*/) return; CODE_BLOCK_TRY @@ -760,33 +760,71 @@ void FacebookProto::ProcessFeeds(void* data) std::string::size_type pos = 0; UINT limit = 0; - resp.data = utils::text::slashu_to_utf8(resp.data); - resp.data = utils::text::source_get_value(&resp.data, 2, "\"html\":\"", ">\""); + DWORD new_time = facy.last_feeds_update_; - while ((pos = resp.data.find("
", pos) - pos); pos += 5; - std::string post_header = utils::text::source_get_value(&post, 4, "
", "<\\/h5>"); - std::string post_message = utils::text::source_get_value(&post, 3, "
", "<\\/h5>"); - std::string post_link = utils::text::source_get_value(&post, 3, "", "<\\/span>"); - std::string post_attach = utils::text::source_get_value(&post, 4, "
", "", "
"); + std::string post_message = utils::text::source_get_value(&post, 3, " userContent\"", ">", "", "", "", "<"); + std::string post_time = utils::text::source_get_value(&post, 3, "", ""); + + std::string time = utils::text::source_get_value(&post_time, 2, "data-utime=\"", "\""); + std::string time_text = utils::text::source_get_value(&post_time, 2, ">", ""); + + DWORD ttime = utils::conversion::to_timestamp(time); + if (ttime > facy.last_feeds_update_) + new_time = ttime; + else + continue; + + std::string post_place = utils::text::source_get_value(&post, 4, "", "", ""); + + std::string premsg = "\n" + time_text; + + post_place = utils::text::trim( + utils::text::remove_html(post_place)); + if (!post_place.empty()) { + premsg += " - " + post_place; + } + premsg += "\n"; // in title keep only name, end of events like "X shared link" put into message - pos2 = post_header.find("<\\/a>") + 5; - post_message = post_header.substr(pos2, post_header.length() - pos2) + post_message; - post_header = post_header.substr(0, pos2); + std::string::size_type pos2 = post_header.find("‎"); + + if (pos2 != std::string::npos) { + utils::text::replace_first(&post_header, "‎", " → "); + } else { + pos2 = post_header.find(" 2) + premsg += a; + post_header = post_header.substr(0, pos2); + } + } + + // Strip "Translate" link + pos2 = post_message.find("role=\"button\">"); + if (pos2 != std::string::npos) { + post_message = post_message.substr(0, pos2 + 14); + } + + post_message = premsg + post_message; // append attachement to message (if any) - post_message += utils::text::trim(post_attach); + //post_message += utils::text::trim(post_attach); facebook_newsfeed* nf = new facebook_newsfeed; @@ -796,15 +834,13 @@ void FacebookProto::ProcessFeeds(void* data) nf->user_id = utils::text::source_get_value(&post_header, 2, "user.php?id=", "&"); - nf->link = utils::text::special_expressions_decode( - utils::text::source_get_value(&post_link, 2, "href=\\\"", "\\\">")); + nf->link = utils::text::special_expressions_decode(post_link); + //utils::text::source_get_value(&post_link, 2, "href=\\\"", "\\\">")); nf->text = utils::text::trim( utils::text::special_expressions_decode( utils::text::remove_html( - utils::text::edit_html(post_message)))); - - //nf->text += "\n" + post_time_text; + utils::text::edit_html(post_message)))); if (!nf->title.length() || !nf->text.length()) { @@ -833,7 +869,8 @@ void FacebookProto::ProcessFeeds(void* data) } news.clear(); - this->facy.last_feeds_update_ = ::time(NULL); + this->facy.last_feeds_update_ = new_time; + //this->facy.last_feeds_update_ = ::time(NULL); debugLogA("***** Feeds processed"); diff --git a/protocols/FacebookRM/src/proto.cpp b/protocols/FacebookRM/src/proto.cpp index b94bd1d5db..bac50cd048 100644 --- a/protocols/FacebookRM/src/proto.cpp +++ b/protocols/FacebookRM/src/proto.cpp @@ -523,6 +523,7 @@ INT_PTR FacebookProto::CheckNewsfeeds(WPARAM, LPARAM) { if (!isOffline()) { facy.client_notify(TranslateT("Loading newsfeeds...")); + facy.last_feeds_update_ = 0; ForkThread(&FacebookProto::ProcessFeeds, NULL); } return 0; -- cgit v1.2.3