using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Navigation; #if WIN32 using MSHTML; #else using mshtml; #endif using System.Diagnostics; using System.Globalization; using sharpknife.Utils; using sharpknife.Strategies; using sharpknife.Controls; using sharpknife.Engines; namespace sharpknife.Commands { public class ParseAdsCommand : Command { private WebBrowserControl browser; private PTCSource source; public PTCSource Source { get { return source; } set { source = value; SourceName = source.Name; OnPropertyChanged("SourceName"); } } public string SourceName { get; set; } private Strategy strategy; public ParseAdsCommand() { } public ParseAdsCommand(string name) { this.Group = "Browser"; this.Timeout = 60; browser = WebBrowserControl.GetWebBrowserControl(); using (databaseEntities context = new databaseEntities()) { var query = (from s in context.PTCSource where s.Name == name select s); Source = query.FirstOrDefault(); } strategy = Strategy.GetStrategy(source.Name); } public override void Execute() { if (!string.IsNullOrWhiteSpace(source.AllowedHost) && source.AllowedHost != "*" && !StringUtils.Contains(Environment.MachineName, source.AllowedHost)) { Status = StatusCode.Canceled; return; } base.Execute(); CommandEngine engine = CommandEngine.GetEngine(); var duplicates = (from c in engine.Commands where c.Type == this.Type && !c.IsCompleted && c != this select c).ToList(); foreach (ParseAdsCommand command in duplicates) { if (command.SourceName == this.SourceName) { Cancel(); Debug = "Duplicate"; return; } } browser.LoadCompleted += ParseAdsCommand_LoadCompleted; Debug = "Navigate"; browser.Navigate(source.PTCUrl); } void ParseAdsCommand_LoadCompleted(object sender, NavigationEventArgs e) { string uri = StringUtils.CleanUri(e.Uri.AbsoluteUri); string baseUrl = StringUtils.CleanUri(source.BaseUrl); string loginUrl = StringUtils.CleanUri(source.LogInUrl); string balanceUrl = StringUtils.CleanUri(source.BalanceUrl); string ptcUrl = StringUtils.CleanUri(source.PTCUrl); if (StringUtils.Contains(browser.Html, "502 Bad Gateway")) { Failed("502 Bad Gateway"); return; } if (Status == StatusCode.Expired) { browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; browser.Stop(); return; } #region Clicksia if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "Clicksia") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, "www.clicksia.com/account.php")) { browser.Navigate(source.PTCUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { // IHTMLElementCollection elements = HtmlUtils.GetElementCollection(browser.Document, "a"); foreach (IHTMLElement element in elements) { IHTMLAnchorElement anchor = (IHTMLAnchorElement)element; if (StringUtils.Contains(anchor.href, "view.php?h")) { AdCommand command = new AdCommand(anchor.href, 30, AdCommand.BonusValue.Cents, 0, source.Name); CommandEngine.GetEngine().Commands.Add(command); } } browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } } #endregion #region ClixSense else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "ClixSense") { //function csmd1(obj) { $(obj).attr('msm', '1') } //function csmd2(obj) { $(obj).attr('msc', '1') } //function adOpen(obj, s, a, b) { // if ($(obj).attr('msm') != '1' || $(obj).attr('msc') != '1') return false; // if (cltm == 1) { alert('WAIT!!! Don\'t Click the Ads so Fast!'); return false } cltm = 1; // window.setTimeout('cltm=0', 5000); $('#pays' + a).html('Clicked'); $(obj).attr('MVPXJw', '1'); // window.open('/en/View_Ads/' + a + '/' + b) //} // // // //
//
WordLinx - Upgrade for just $15!
//
// Micro Ad // 3 Sec // $0.001 //
if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { //browser.Navigate(source.LogInUrl); browser.Navigate("https://www.clixsense.com/en/Sign_In?r=1"); return; } else if (e.Uri.AbsoluteUri == "https://www.clixsense.com/en/Sign_In?r=1") { strategy.Login(browser, source); return; } else if (e.Uri.AbsoluteUri == source.PTCUrl) { IHTMLElementCollection tables = HtmlUtils.GetElementCollection(browser.Document, "table"); foreach (IHTMLElement element in tables) { string table = element.innerHTML; IHTMLElementCollection innerTables = ((IHTMLElementCollection)element.all).tags("table"); if (innerTables.length == 0 && element.className == "ptc_ads") { //element.setAttribute("msm", "1"); //element.setAttribute("msc", "1"); //element.click(); //break; //adOpen(this,1,463772,'445729') string html = element.outerHTML; html = StringUtils.RemoveQuotes(html); string[] tokens = StringUtils.GetTokens(html, "{}adOpen(this,{},{},'{}'){}"); string a = tokens[2]; string b = tokens[3]; // Fake logout ad if (StringUtils.Contains(a, "123456")) { continue; } //Clicked IHTMLDocument3 document = (IHTMLDocument3)browser.Document; IHTMLElement pays = document.getElementById(string.Format("pays{0}", a)); if (StringUtils.Contains(pays.innerText, "Clicked")) { continue; } //3 Sec string time = "30"; IHTMLElementCollection spans = element.all.tags("span"); foreach (IHTMLElement span in spans) { if (span.id == "time") { time = span.innerText; time = StringUtils.GetTokens(time, "{} Sec")[0]; } } string link = string.Format("https://www.clixsense.com/en/View_Ads/{0}/{1}", a, b); AdCommand command = new AdCommand(link, int.Parse(time) + 5, AdCommand.BonusValue.Cents, 0, source.Name); CommandEngine.GetEngine().Commands.Add(command); } } browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } } #endregion #region DonkeyMails else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "DonkeyMails") { Strategy strategy = Strategy.GetStrategy("DonkeyMails"); if (StringUtils.Contains(uri, loginUrl) || strategy.CheckLogin(browser, source)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, ptcUrl)) { bool more = strategy.ParseAds(browser, source); if (more) { //Next Page //IHTMLElementCollection elements = HtmlUtils.GetElementCollection(browser.Document, "a"); //foreach (IHTMLElement element in elements) //{ // if (StringUtils.Contains(element.innerText, "Next Page")) // { // element.click(); // //return; // break; // } //} } else { Debug = "Points only"; } Complete(); return; } } #endregion #region EuroPinata else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "EuroPinata") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, "www.euro-pinata.com/index.php?view=login&a=y")) { return; } else { browser.Navigate(source.PTCUrl); return; } } #endregion #region GetPaidMail else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && StringUtils.Contains(source.Name, "GetPaidMail")) { if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } } #endregion #region Incentria else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "Incentria") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, "www.incentria.com/account.php")) { browser.Navigate(source.PTCUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { // IHTMLElementCollection elements = HtmlUtils.GetElementCollection(browser.Document, "a"); foreach (IHTMLElement element in elements) { IHTMLAnchorElement anchor = (IHTMLAnchorElement)element; if (StringUtils.Contains(anchor.href, "view.php?h")) { AdCommand command = new AdCommand(anchor.href, 30, AdCommand.BonusValue.Cents, 0, source.Name); CommandEngine.GetEngine().Commands.Add(command); } } browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } } #endregion #region JillsClickCorner else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "JillsClickCorner") { if (StringUtils.Contains(uri, ptcUrl)) { IHTMLElementCollection divs = HtmlUtils.GetElementCollection(browser.Document, "div"); List commands = new List(); int paidAds = 0; foreach (IHTMLElement element in divs) { string div = element.innerHTML; IHTMLElementCollection links = ((IHTMLElementCollection)element.all).tags("a"); if (links.length == 1) { IHTMLAnchorElement alink = links.item(System.Type.Missing, 0); if (alink.href.IndexOf("viewPTC.php", StringComparison.InvariantCultureIgnoreCase) >= 0) { string href = alink.href; string value = div.Substring(div.IndexOf("This ad is worth", StringComparison.InvariantCultureIgnoreCase) + ("This ad is worth").Length + 1).Trim(); AdCommand.BonusValue bonus = AdCommand.BonusValue.Cents; decimal bonusValue = 0m; if (value.IndexOf('$') >= 0) { bonus = AdCommand.BonusValue.Cents; value = value.Substring(1); bonusValue = decimal.Parse(value, CultureInfo.InvariantCulture.NumberFormat) * 100; paidAds++; } else { bonus = AdCommand.BonusValue.GameTokens; value = value.Substring(0, value.IndexOf(' ')).Trim(); bonusValue = decimal.Parse(value, CultureInfo.InvariantCulture.NumberFormat); } CommandEngine.GetEngine().Commands.Add(new AdCommand(href, 10, bonus, bonusValue, source.Name)); } } } ParseAdsCommand parseAdsCommand = new ParseAdsCommand(source.Name); if (paidAds > 0) { foreach (AdCommand command in commands) { CommandEngine.GetEngine().Commands.Add(command); } } else { Debug = "Points only"; parseAdsCommand.NextExecution = DateTime.Now.AddHours(2); } CommandEngine.GetEngine().Commands.Add(parseAdsCommand); Complete(); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } } #endregion #region MyFreeShares else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "MyFreeShares") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Status = StatusCode.Completed; browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } // Members Area (after login) else if (StringUtils.Contains(uri, "www.myfreeshares.com/member.php")) { IHTMLFormElement form = browser.GetForm("member5.php"); form.submit(); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } } #endregion #region NeoBux else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "NeoBux") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (uri == ptcUrl) { //View Advertisements  IHTMLElementCollection elements = HtmlUtils.GetElementCollection(browser.Document, "a"); foreach (IHTMLElement element in elements) { if (element.innerText == "View Advertisements") { IHTMLAnchorElement link = (IHTMLAnchorElement)element; browser.Navigate(link.href); return; } } throw new Exception("Unexpected behavior"); } else if (StringUtils.Contains(uri, ptcUrl)) { // IHTMLElementCollection elements = HtmlUtils.GetElementCollection(browser.Document, "span"); foreach (IHTMLElement element in elements) { if (!string.IsNullOrEmpty(element.id) && element.id.StartsWith("da") && element.id.EndsWith("c")) { string id = element.id; // Remove prefix id = id.Substring(2); // Remove suffix id = id.Substring(0, id.Length - 1); // IHTMLImgElement img = (IHTMLImgElement)HtmlUtils.GetElement(browser.Document, string.Format("img_{0}", id)); if (!StringUtils.Contains(img.src, "estrela_16_c.gif")) { // IHTMLElementCollection links = element.all.tags("a"); foreach (IHTMLAnchorElement link in links) { string href = link.href; CommandEngine.GetEngine().Commands.Add(new AdCommand(href, 15, AdCommand.BonusValue.Cents, 0, source.Name)); } } } } browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else { browser.Navigate(source.PTCUrl); return; } } #endregion #region NoMinimum else if ( StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && StringUtils.Contains(source.Name, "No-Minimum") ) { if (strategy.CheckLogin(browser, source)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } } #endregion #region ProBux else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "ProBux") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else { browser.Navigate(source.PTCUrl); return; } } #endregion #region SamBux else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "SamBux") { if (StringUtils.Contains(browser.Html, "500 Internal Server Error")) { Failed("500 Internal Server Error"); return; } if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else { browser.Navigate(source.PTCUrl); return; } } #endregion #region VoBux else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "VoBux") { if (!StringUtils.Contains(uri, loginUrl) && strategy.CheckLogin(browser, source)) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { strategy.ParseAds(browser, source); Complete(); return; } else if (StringUtils.Contains(uri, loginUrl)) { try { strategy.Login(browser, source); return; } catch (Exception ex) { Failed(ex.Message); } } else { browser.Navigate(source.PTCUrl); return; } } #endregion #region WordLinx else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && source.Name == "WordLinx") { if (StringUtils.Contains(uri, "wordlinx.com/warning.php")) { browser.Navigate(source.LogInUrl); return; } else if (StringUtils.Contains(uri, ptcUrl)) { //Earn 10$ per day with minimal work! IHTMLElementCollection links = HtmlUtils.GetElementCollection(browser.Document, "a"); foreach (IHTMLElement element in links) { IHTMLAnchorElement link = (IHTMLAnchorElement)element; if (!string.IsNullOrEmpty(link.href) && StringUtils.Contains(link.href, "advert-browse.php?sc")) { AdCommand command = new AdCommand(link.href, 30, AdCommand.BonusValue.Cents, 0.1m, source.Name); CommandEngine.GetEngine().Commands.Add(command); } } browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; Status = StatusCode.Completed; return; } else if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, balanceUrl)) { browser.Navigate(source.PTCUrl); return; } } #endregion #region YouRoMail else if (StringUtils.Contains(uri, baseUrl) && !string.IsNullOrEmpty(source.Name) && StringUtils.Contains(source.Name, "YouRoMail")) { if (StringUtils.Contains(uri, loginUrl)) { strategy.Login(browser, source); return; } else if (StringUtils.Contains(uri, ptcUrl)) { IHTMLElementCollection tables = HtmlUtils.GetElementCollection(browser.Document, "table"); List commands = new List(); int paidAds = 0; string html = browser.Html; foreach (IHTMLElement element in tables) { string table = element.innerHTML; IHTMLElementCollection innerTables = ((IHTMLElementCollection)element.all).tags("table"); if (innerTables.length == 0) { int start = html.IndexOf(table); int end = html.IndexOf("
", start, StringComparison.InvariantCultureIgnoreCase); if (end >= 0 && html.Substring(start, end - start).IndexOf("The ad above is worth", StringComparison.InvariantCultureIgnoreCase) >= 0) { string ad = html.Substring(start, end - start); // Cheat bot checks //http://www.no-minimum.com/scripts/runner.php?REDIRECT=http%3A%2F%2Fwww.no-minimum.com%2Fimages%2Fohoh.gif&hash=7ae463cd6a3a40d64a083502d71c9bb4 if (ad.IndexOf("ohoh.gif", StringComparison.InvariantCultureIgnoreCase) >= 0) { throw new Exception("Not expected"); continue; } try { AdLogItem item = new AdLogItem(DateTime.Now, ad); if (item.Value > 0) { AdCommand command = new AdCommand( item.Link, item.Timer + 5, item.Type == AdLogItem.ValueType.Cents ? AdCommand.BonusValue.Cents : AdCommand.BonusValue.Points, item.Value, source.Name); //new Uri(link).GetComponents(UriComponents.Host, UriFormat.SafeUnescaped)); commands.Add(command); if (command.Bonus == AdCommand.BonusValue.Cents) paidAds++; } } catch (Exception ex) { } } } } ParseAdsCommand parseAdsCommand = new ParseAdsCommand(source.Name); if (paidAds > 0) { foreach (AdCommand command in commands) { CommandEngine.GetEngine().Commands.Add(command); } } else { Debug = "Points only"; parseAdsCommand.NextExecution = DateTime.Now.AddHours(2); } CommandEngine.GetEngine().Commands.Add(parseAdsCommand); Complete(); return; } } #endregion //browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; //throw new Exception(string.Format("Undefined strategy: {0} {1} [{2}]", source.Name, uri, browser.Subscribers)); } public override void Expire() { base.Expire(); browser.Stop(); browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; } public override void Cancel() { base.Cancel(); browser.Stop(); browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; } public override void Complete() { base.Complete(); browser.Stop(); browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; } public void Failed(string message) { Debug = message; Status = StatusCode.Failed; browser.Stop(); browser.LoadCompleted -= ParseAdsCommand_LoadCompleted; } } }