public override void Synchronize()
        {
            AffiliateNetwork Network = base.Network;

            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffers WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }

                XmlDocument doc  = GetElement(Network.PublisherPassword, Network.PublisherUsername, ThrowExceptions);
                XmlElement  root = doc.DocumentElement;

                var InterestingList = TableHelper.GetListFromDataTable <CPAOffer>(dt, 100, true);
                var idNodes         = root.SelectNodes("/campaigns/campaign/id");

                foreach (XmlNode node in idNodes)
                {
                    string id = node.InnerText;
                    //Check if already on the list
                    CPAOffer ThisOffer = SyncedNetwork.HasThisOffer(InterestingList, id);
                    if (ThisOffer != null)
                    {
                        //We have it
                        ThisOffer.Status = Advertising.AdvertStatus.WaitingForAcceptance;
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in InterestingList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        //"Delete" it
                        elem.Status            = AdvertStatus.Rejected;
                        elem.IsSyncWithNetwork = false;
                        elem.Save();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with synchronizing " + Network.Name + ": " + ex.Message + ". Check your Affiliate Id/API Key and if the website is available");
                }
            }
        }
예제 #2
0
        public override void Download()
        {
            #region Universal

            AffiliateNetwork Network = base.Network;

            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffersOnHold WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }
                var OnHoldList = TableHelper.GetListFromDataTable <CPAOfferOnHold>(dt, 100, true);

                #endregion Universal

                JObject element    = GetElement(Network.PerformaUsername, ThrowExceptions);
                int     TotalCount = Convert.ToInt32(element["number_offers"]);

                #region Universal

                //Lets process it in 1-1000 batches
                int BatchesCount = Convert.ToInt32(Math.Ceiling((double)TotalCount / (double)1000.0));
                int MainIterator = 0;

                for (int i = 0; i < BatchesCount; ++i)
                {
                    var  Query = ConstructInsertQueryStart();
                    bool AreSomeRecordsInQuery = false;

                    for (int j = 0; j < 1000 && MainIterator < TotalCount; j++)
                    {
                        try
                        {
                            #endregion Universal

                            var offer = element["offers"][MainIterator];

                            string id          = offer["campid"].ToString();
                            string name        = offer["title"].ToString();
                            string url         = offer["link"].ToString();
                            string description = offer["description"].ToString();
                            string rate        = offer["amount"].ToString(); // e.g. 0.24

                            string countries = "";
                            try
                            {
                                countries = offer["country"].ToString(); // 'PL' 'US'
                            }
                            catch (Exception ex) { }

                            string incent = "Yes"; // offer["incent"].ToString(); //'Yes' 'No'
                            string banner = "";    // offer["banner"].ToString();

                            try
                            {
                                banner = offer["creatives"][0]["url"].ToString();
                            }
                            catch (Exception ex) { }

                            #region Universal

                            SyncedNetwork.HandleAddition(name, description, rate, banner, url, incent, countries, base.Network, id, OnHoldList, ref AreSomeRecordsInQuery, ref Query);

                            //Increase the iterator
                            MainIterator++;
                        }
                        catch (Exception ex) { }
                    }
                    //Now execute the batch;
                    if (AreSomeRecordsInQuery)
                    {
                        using (var bridge = ParserPool.Acquire(Database.Client))
                        {
                            if (Query[Query.Length - 1] == ',')
                            {
                                Query[Query.Length - 1] = ';';
                            }


                            bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                        }
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in OnHoldList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        elem.Delete();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with offers export/download " + Network.Name + ": "
                                           + ex.Message + ". Check your username/password and if the website is available");
                }
            }
            #endregion Universal
        }
예제 #3
0
        public override void Download()
        {
            AffiliateNetwork Network = base.Network;


            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffersOnHold WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }

                XmlElement element    = GetElement(Network.Name, Network.PerformaUsername, Network.PerformaPassword, Network.PerformaWebsiteId, ThrowExceptions);
                var        OnHoldList = TableHelper.GetListFromDataTable <CPAOfferOnHold>(dt, 100, true);

                //Lets process it in 1-1000 batches
                int TotalCount   = element.ChildNodes.Count;
                int BatchesCount = Convert.ToInt32(Math.Ceiling((double)TotalCount / (double)1000.0));
                int MainIterator = 0;

                for (int i = 0; i < BatchesCount; ++i)
                {
                    var  Query = ConstructInsertQueryStart();
                    bool AreSomeRecordsInQuery = false;

                    for (int j = 0; j < 1000 && MainIterator < TotalCount; j++)
                    {
                        XmlNode offer = element.ChildNodes[MainIterator];

                        string id           = offer["id"].InnerText;
                        string name         = offer["name"].InnerText;
                        string type         = offer["type"].InnerText;
                        string url          = offer["url"].InnerText;
                        string description  = offer["description"].InnerText;
                        string requirements = offer["requirements"].InnerText;
                        string rate         = offer["rate"].InnerText; // e.g. 0.24
                        string categoy      = offer["categoy"].InnerText;
                        string countries    = offer["countries"].InnerText;
                        string incent       = offer["incent"].InnerText; //'Yes' 'No'
                        string banner       = offer["banner"].InnerText;

                        CPAOfferOnHold ThisOffer = SyncedNetwork.HasThisOffer(OnHoldList, id, name);

                        if (ThisOffer != null)
                        {
                            //We have it, just change the status
                            ThisOffer.Status = Advertising.AdvertStatus.WaitingForAcceptance;
                        }
                        else
                        {
                            AreSomeRecordsInQuery = true;

                            //Preparte the variables to fit database

                            StringBuilder sb = new StringBuilder();
                            if (!string.IsNullOrEmpty(description))
                            {
                                sb.Append(description);
                                sb.Append("; ");
                            }
                            sb.Append(requirements);

                            Money UserRate;
                            if (rate.Contains("."))
                            {
                                UserRate = Money.Parse(rate);
                            }
                            else
                            {
                                UserRate = Money.Parse(rate + ".0");
                            }
                            UserRate = Money.MultiplyPercent(UserRate, Network.DefaultPercentForMembers);

                            if (name.Length > 50)
                            {
                                name = name.Substring(0, 49);
                            }
                            if (!string.IsNullOrEmpty(banner) && banner.Length > 150)
                            {
                                banner = banner.Substring(0, 149);
                            }

                            string ParsedDescription = sb.ToString();
                            if (ParsedDescription.Length >= 4000)
                            {
                                ParsedDescription = ParsedDescription.Substring(0, 3998);
                            }

                            //We need to add it
                            CPAOfferOnHold NewOffer = new CPAOfferOnHold();
                            NewOffer.IsFromAutomaticNetwork = true;
                            NewOffer.NetworkOfferId         = id;
                            NewOffer.Title              = name;
                            NewOffer.ImageURL           = banner;
                            NewOffer.TargetURL          = url;
                            NewOffer.DateAdded          = DateTime.Now;
                            NewOffer.Status             = Advertising.AdvertStatus.Active;
                            NewOffer.AdvertiserUsername = Network.Name;
                            NewOffer.LoginBoxRequired   = false;
                            NewOffer.EmailBoxRequired   = false;
                            NewOffer.LastCredited       = OffersManager.DateTimeZero;
                            NewOffer.Description        = ParsedDescription;
                            NewOffer.Category           = new Titan.CPACategory(Titan.CPACategory.DEFAULT_CATEGORY_ID);
                            NewOffer.BaseValue          = UserRate;
                            NewOffer.CreditsBought      = 1000000; //Infinity
                            NewOffer.NetworkName        = Network.Name;
                            NewOffer.NetworkRate        = rate;
                            NewOffer.IsSyncWithNetwork  = false; // by default
                            NewOffer.IsDaily            = false;
                            NewOffer.MaxDailyCredits    = 1;
                            //NewOffer.GeolocatedCountries = countries;

                            if (incent.Trim() == "No")
                            {
                                NewOffer.CreditOfferAs = CreditOfferAs.NonCash;
                            }
                            else
                            {
                                NewOffer.CreditOfferAs = CreditOfferAs.NetworkDefault;
                            }

                            SyncedNetwork.ConstructInsertQuery(Query, NewOffer);
                        }

                        //Increase the iterator
                        MainIterator++;
                    }
                    //Now execute the batch;
                    if (AreSomeRecordsInQuery)
                    {
                        using (var bridge = ParserPool.Acquire(Database.Client))
                        {
                            if (Query[Query.Length - 1] == ',')
                            {
                                Query[Query.Length - 1] = ';';
                            }

                            bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                        }
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in OnHoldList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        elem.Delete();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with offers export/download " + Network.Name + ": "
                                           + ex.Message + ". Check your username/password and if the website is available");
                }
            }
        }
예제 #4
0
        public override void Download()
        {
            #region Universal

            AffiliateNetwork Network = base.Network;

            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffersOnHold WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }
                var OnHoldList = TableHelper.GetListFromDataTable <CPAOfferOnHold>(dt, 100, true);

                #endregion Universal

                JArray element    = GetElement(Network.PublisherPassword, ThrowExceptions);
                int    TotalCount = element.Count;

                //Lets process it in 1-1000 batches
                int BatchesCount = Convert.ToInt32(Math.Ceiling((double)TotalCount / (double)400.0));
                int MainIterator = 0;

                for (int i = 0; i < BatchesCount; ++i)
                {
                    var  Query = ConstructInsertQueryStart();
                    bool AreSomeRecordsInQuery = false;

                    for (int j = 0; j < 400 && MainIterator < TotalCount; j++)
                    {
                        try
                        {
                            var offer = element[MainIterator];

                            string id          = offer["offer_id"].ToString();
                            string name        = offer["offer_name"].ToString();
                            string description = offer["offer_requirements"].ToString();
                            string rate        = offer["offer_commission"].ToString();
                            string incent      = offer["offer_allows_incent"].ToString();

                            string url    = String.Empty;
                            string banner = String.Empty;

                            string countries = GetGeolocation(Network.PublisherPassword, id).Replace("UK", "GB");
                            var    creatives = GetCreatives(Network.PublisherPassword, id);

                            if (creatives["offer_creative_banners"].HasValues)
                            {
                                url    = creatives["offer_creative_banners"][0]["banner_tracking_link"].ToString().Replace("&subid=&", "&subid=%USERNAME%&");;
                                banner = creatives["offer_creative_banners"][0]["banner_creative_url"].ToString();
                            }
                            else if (creatives["offer_text_creatives"].HasValues)
                            {
                                url = creatives["offer_text_creatives"][0]["creative_link"].ToString().Replace("&subid=&", "&subid=%USERNAME%&");;
                            }

                            if (!string.IsNullOrWhiteSpace(url) && !url.ToUpper().Contains("NOT APPROVED"))
                            {
                                SyncedNetwork.HandleAddition(name, description, rate, banner, url, incent, countries, base.Network, id, OnHoldList, ref AreSomeRecordsInQuery, ref Query);
                            }

                            //Increase the iterator
                            MainIterator++;
                        }
                        catch (Exception ex) { ErrorLogger.Log(ex); }
                    }
                    //Now execute the batch;
                    if (AreSomeRecordsInQuery)
                    {
                        using (var bridge = ParserPool.Acquire(Database.Client))
                        {
                            if (Query[Query.Length - 1] == ',')
                            {
                                Query[Query.Length - 1] = ';';
                            }
                            bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                        }
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in OnHoldList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        elem.Delete();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with offers export/download " + Network.Name + ": "
                                           + ex.Message + ". Check your username/password and if the website is available");
                }
            }
        }
        public override void Download()
        {
            #region Universal

            AffiliateNetwork Network = base.Network;

            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffersOnHold WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }
                var OnHoldList = TableHelper.GetListFromDataTable <CPAOfferOnHold>(dt, 100, true);

                #endregion Universal

                XmlDocument doc        = GetElement(Network.PublisherPassword, Network.PublisherUsername, ThrowExceptions);
                XmlElement  root       = doc.DocumentElement;
                XmlNodeList elemList   = root.ChildNodes;
                int         TotalCount = elemList.Count;

                XmlNodeList ids          = root.SelectNodes("/offers/offer/offer_id");
                XmlNodeList names        = root.SelectNodes("/offers/offer/offer_name");
                XmlNodeList descriptions = root.SelectNodes("/offers/offer/requirements");
                XmlNodeList commissions  = root.SelectNodes("/offers/offer/rate");
                XmlNodeList countries    = root.SelectNodes("/offers/offer/allowed_countries");
                XmlNodeList incentives   = root.SelectNodes("/offers/offer/cash_incentive_allowed");
                XmlNodeList banners      = root.SelectNodes("/offers/offer/creatives/image_url");
                XmlNodeList urls         = root.SelectNodes("/offers/offer/creatives/publisher_url");


                //Lets process it in 1-1000 batches
                int BatchesCount = Convert.ToInt32(Math.Ceiling((double)TotalCount / (double)400.0));
                int MainIterator = 0;

                for (int i = 0; i < BatchesCount; ++i)
                {
                    var  Query = ConstructInsertQueryStart();
                    bool AreSomeRecordsInQuery = false;

                    for (int j = 0; j < 400 && MainIterator < TotalCount; j++)
                    {
                        try
                        {
                            var offer = elemList[MainIterator];

                            string id              = ids[MainIterator].InnerText;
                            string name            = names[MainIterator].InnerText;
                            string description     = descriptions[MainIterator].InnerText;
                            string incent          = incentives[MainIterator].InnerText;
                            string url             = urls[MainIterator].InnerText.Replace("sid1/", "sid1/%USERNAME%");
                            string banner          = banners[MainIterator].InnerText;
                            string rate            = commissions[MainIterator].InnerText;
                            var    countriesList   = countries[MainIterator].SelectNodes("country");
                            string countriesString = "";
                            if (countriesList.Count == 1 && countriesList[0].InnerText.ToUpper() == "ALL")
                            {
                                countriesString = "";
                            }
                            else
                            {
                                foreach (XmlElement country in countriesList)
                                {
                                    countriesString += country.InnerText.Trim() + ", ";
                                }
                                if (countriesString.EndsWith(", "))
                                {
                                    countriesString = countriesString.Remove(countriesString.Length - 2);
                                }
                            }

                            if (!string.IsNullOrWhiteSpace(url))
                            {
                                SyncedNetwork.HandleAddition(name, description, rate, banner, url, incent, countriesString, base.Network, id, OnHoldList, ref AreSomeRecordsInQuery, ref Query);
                            }

                            //Increase the iterator
                            MainIterator++;
                        }
                        catch (Exception ex) { ErrorLogger.Log(ex); }
                    }
                    //Now execute the batch;
                    if (AreSomeRecordsInQuery)
                    {
                        using (var bridge = ParserPool.Acquire(Database.Client))
                        {
                            if (Query[Query.Length - 1] == ',')
                            {
                                Query[Query.Length - 1] = ';';
                            }
                            bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                        }
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in OnHoldList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        elem.Delete();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with offers export/download " + Network.Name + ": "
                                           + ex.Message + ". Check your username/password and if the website is available");
                }
            }
        }
예제 #6
0
        public override void Download()
        {
            AffiliateNetwork Network = base.Network;

            try
            {
                DataTable dt = new DataTable();
                using (var bridge = ParserPool.Acquire(Database.Client))
                {
                    dt = bridge.Instance.ExecuteRawCommandToDataTable("SELECT * FROM CPAOffersOnHold WHERE NetworkName = '" + Network.Name + "' ORDER BY NetworkOfferIdInt ASC");
                }

                JArray element    = GetElement(Network.PublisherPassword, Network.PublisherUsername, ThrowExceptions);
                var    OnHoldList = TableHelper.GetListFromDataTable <CPAOfferOnHold>(dt, 100, true);

                //Lets process it in 1-1000 batches
                int TotalCount   = element.Count;
                int BatchesCount = Convert.ToInt32(Math.Ceiling((double)TotalCount / (double)1000.0));
                int MainIterator = 0;

                for (int i = 0; i < BatchesCount; ++i)
                {
                    var  Query = ConstructInsertQueryStart();
                    bool AreSomeRecordsInQuery = false;

                    for (int j = 0; j < 1000 && MainIterator < TotalCount; j++)
                    {
                        var offer = element[MainIterator];

                        string id          = offer["id"].ToString();
                        string name        = offer["name"].ToString();
                        string description = offer["description"].ToString();
                        string rate        = offer["default_payout"].ToString();

                        CPAOfferOnHold ThisOffer = SyncedNetwork.HasThisOffer(OnHoldList, id, name);

                        if (ThisOffer != null)
                        {
                            //We have it, just change the status
                            ThisOffer.Status = Advertising.AdvertStatus.WaitingForAcceptance;
                        }
                        else
                        {
                            AreSomeRecordsInQuery = true;

                            //Preparte the variables to fit database
                            Money UserRate;
                            if (rate.Contains("."))
                            {
                                UserRate = Money.Parse(rate);
                            }
                            else
                            {
                                UserRate = Money.Parse(rate + ".0");
                            }
                            UserRate = Money.MultiplyPercent(UserRate, Network.DefaultPercentForMembers);

                            if (name.Length > 50)
                            {
                                name = name.Substring(0, 49);
                            }

                            string url = GetTrackingUrl(Network.PublisherPassword, Network.PublisherUsername, id);
                            //if (string.IsNullOrEmpty(url))
                            //{
                            //    System.Diagnostics.Debug.WriteLine(id);
                            //    MainIterator++;
                            //    continue;
                            //}
                            string countries = GetCountries(id, Network.PublisherPassword, Network.PublisherUsername);

                            //We need to add it
                            CPAOfferOnHold NewOffer = new CPAOfferOnHold();
                            NewOffer.IsFromAutomaticNetwork = true;
                            NewOffer.NetworkOfferId         = id;
                            NewOffer.Title              = name;
                            NewOffer.TargetURL          = url;
                            NewOffer.DateAdded          = DateTime.Now;
                            NewOffer.Status             = Advertising.AdvertStatus.Active;
                            NewOffer.AdvertiserUsername = Network.Name;
                            NewOffer.LoginBoxRequired   = false;
                            NewOffer.EmailBoxRequired   = false;
                            NewOffer.LastCredited       = OffersManager.DateTimeZero;
                            NewOffer.Description        = description;
                            NewOffer.Category           = new Titan.CPACategory(Titan.CPACategory.DEFAULT_CATEGORY_ID);
                            NewOffer.BaseValue          = UserRate;
                            NewOffer.CreditsBought      = 1000000; //Infinity
                            NewOffer.NetworkName        = Network.Name;
                            NewOffer.NetworkRate        = rate;
                            NewOffer.IsSyncWithNetwork  = false; // by default
                            NewOffer.IsDaily            = false;
                            NewOffer.MaxDailyCredits    = 1;
                            NewOffer.AddGeolocation(new GeolocationUnit(countries));
                            NewOffer.CreditOfferAs = CreditOfferAs.NetworkDefault;

                            SyncedNetwork.ConstructInsertQuery(Query, NewOffer);
                        }

                        //Increase the iterator
                        MainIterator++;
                    }
                    //Now execute the batch;
                    if (AreSomeRecordsInQuery)
                    {
                        using (var bridge = ParserPool.Acquire(Database.Client))
                        {
                            if (Query[Query.Length - 1] == ',')
                            {
                                Query[Query.Length - 1] = ';';
                            }

                            bridge.Instance.ExecuteRawCommandNonQuery(Query.ToString());
                        }
                    }
                }

                //Now, remove the offers that shouldn't be on the list
                foreach (var elem in OnHoldList)
                {
                    if (elem.Status != AdvertStatus.WaitingForAcceptance)
                    {
                        elem.Delete();
                    }
                }

                Network.LastSyncDate = DateTime.Now;
                Network.Save();
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
                if (base.ThrowExceptions)
                {
                    throw new MsgException("There was a problem with offers export/download " + Network.Name + ": "
                                           + ex.Message + ". Check your username/password and if the website is available");
                }
            }
        }