コード例 #1
0
ファイル: DataDBNet.cs プロジェクト: molec1/MySPM_NewParsers
        private HtmlDocument GetPage(Uri site, string method, CookieContainer cookie)
        {
            HtmlDocument document = new HtmlDocument();
            try
            {
                HttpWebRequest reqGET = (HttpWebRequest)WebRequest.Create(site);
                reqGET.UserAgent = _userAgents[new Random().Next(0, _userAgents.Count() - 1)];
                reqGET.Method = method;//"GET"; // Устанавливаем метод передачи данных в POST
                reqGET.CookieContainer = cookie;// ;
                
                using (var result = reqGET.GetResponse())
                {
                    using (Stream stream = result.GetResponseStream())
                    {
                        document.Load(stream, this.Encoding);
                        if (stream != null)
                            ((IDisposable)stream).Dispose();
                        GC.SuppressFinalize(stream);
                    }
                    result.Close();
                    GC.SuppressFinalize(result);
                }
                /*using (System.Net.HttpWebResponse result = (HttpWebResponse)reqGET.GetResponse())
                {

                    using (Stream stream = result.GetResponseStream())
                    {
                        document.Load(stream, this.Encoding);
                        if (stream != null)
                            ((IDisposable)stream).Dispose();
                        GC.SuppressFinalize(stream);
                    }
                    result.Close();
                    GC.SuppressFinalize(result);
                }*/
                GC.SuppressFinalize(reqGET);
            }
            catch (WebException we)
            {

                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(site.AbsoluteUri) ? site.AbsoluteUri : _startAddress, we.Message);
                document = null;
                if (site.AbsoluteUri.Contains("avito"))
                    Console.WriteLine("Авитоошибка1 " + we.Message);
                GetException = we;
            }
            catch (UriFormatException ex)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(site.AbsoluteUri) ? site.AbsoluteUri : _startAddress, "ПРОКСИ: " + ex.Message);
                document = null;
            }
            catch (Exception ex)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(site.AbsoluteUri) ? site.AbsoluteUri : _startAddress, "ПРОКСИ: " + ex.Message);
                document = null;
            }
            return document;
        }
コード例 #2
0
        public void NSetStatistics(int jobID, string dbConnectionString, string hostName, int streamNumber)
        {
            try
            {
                DataDBService ddbs = new DataDBService();
                using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString))
                if (conn != null)
                {
                    try
                    {
                        string sqlI =
                        @"INSERT INTO [ParsersStatistics] ([JobID],[SourceID],[SourceDescription],[DateBegin],[DateEnd],[Complete],[NumberOfRestart],[CountAnnouncement],[NewAnnouncement],[UpdatedAnnouncement],[Host],[Stream]) 
                    SELECT top 1  " + jobID +
                            @",s.ID, pj.SourceDescription,pj.DateBegin, 

                            case 
                             when pj.DateEnd >= pj.DateBegin 
                                 then pj.DateEnd 
                            else NULL
                            end, 

                        pj.[Complete],
                        pj.[NumberOfRestart],
                        pj.[CountAds],

                        (select COUNT(a.id)
                        from AddressesMask a
                        left join [PJobUpdate] p on a.JobID = p.ID
                        where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104)
                        and p.ID = " + jobID + @"
                        and a.DateLastUpload=a.DateFirstUpload),

                        (select COUNT(a.id)
                        from AddressesMask a
                        left join [PJobUpdate] p on a.JobID = p.ID
                        where a.DateLastUpload between p.DateBegin and p.DateEnd + CONVERT(TIME,'00:00:05.000',104)
                        and p.ID = " + jobID + @"
                        and a.DateLastUpload>a.DateFirstUpload),'" +
                            hostName + "'," + streamNumber + @"
                    FROM [PJobView] pj
                    INNER JOIN [Sources] s on s.[Source] = pj.[Source] 
                    WHERE pj.ID = " + jobID;

                        string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка добавленя записи в статистику"
                                 + "jobid = " + jobID + ". " + sI);
                        }
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
            catch (Exception e)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString());
            }

        }
コード例 #3
0
        //ставим метку удаленного
        public void NSetDeletedAddresses(int jobID, string dbConnectionString)
        {

            /*
             * update AddressesMask
                set Deleted=1
                where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP)
                and JobID=N
                Где N - id'шник его джоба
             */
            try
            {
                DataDBService ddbs = new DataDBService();
                using(SqlConnection conn = ddbs.GetDBCon(dbConnectionString))
                if (conn != null)
                {
                    try
                    {
                        string sqlI = @"
                                    update AddressesMask
                                    set Deleted=1
                                    where Deleted is null and DateLastUpload<DATEADD(DAY,-5, CURRENT_TIMESTAMP)
                                    and JobID=" + jobID;

                        string sI = ddbs.ExecuteSQLCommand(sqlI, dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка метки deleted. "
                                 + "jobid = " + jobID + ". " + sI);
                        }
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }
            catch (Exception e)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(dbConnectionString, 0, null, "Ошибка в DataDBExtention.NSetStatistics." + e.ToString());
            }
        }
コード例 #4
0
        protected bool IUDAdressesMask(string hostName, int jobID)
        {
            //из upload в адреса
            using(DataDBService ddbs = new DataDBService())
            using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString))
            try
            {
            if (conn != null)
                    {

                        //проставление deleted старым ссылкам с изменившимся хэшем (чтоб по 100 раз не перепарсивать)

                        string SQLstrU0 =
                        "update AddressesMask "+
                        "set Deleted = 1 "+
                        "where ID in "+
                        "( "+
                        "    select id "+
                        "    from AddressesMask a "+

                        "    where a.Address>'' and Deleted is null and exists " +

                        "    ("+
                        "        select * "+
                        "        from AddressesMaskUpload u "+

                        "        where u.Address = a.Address "+

                        "        and u.Hash != a.Hash " +
                        "        AND u.Host ='" + hostName + "' AND u.StreamNumber =" + _streamNumber+
                        "    ) " +
                        ")";

                        string sU0 = ddbs.ExecuteSQLCommand(SQLstrU0, _dbConnectionString);
                        if (!string.IsNullOrEmpty(sU0))
                        {
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. "
                                 + "jobid = " + jobID + ". " + sU0);
                            return false;
                        }

                        //insert того чего еще нет

                        string SQLstrI =
                        "INSERT INTO [AddressesMask] ([JobID],[Source_ref],[Address] ,[Sticker],[DateFirstUpload],[DateLastUpload],[Hash]) " +
                        "SELECT up.[JobID],s.ID,up.[Address],up.[Sticker], up.[DateUpload], up.[DateUpload],up.[Hash] " +
                        "FROM [AddressesMaskUpload] up " +
                        "LEFT JOIN PjobStat pj on up.jobid = pj.ID " +
                        "LEFT JOIN Sources s on s.Source = pj.Source " +
                        "WHERE up.[Hash] NOT IN (SELECT a.[Hash] FROM AddressesMask a) " +
                        "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber;

                        string sI = ddbs.ExecuteSQLCommand(SQLstrI, _dbConnectionString);
                        if (!string.IsNullOrEmpty(sI))
                        {
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка добавление ссылок в AddressesMask. "
                                 + "jobid = " + jobID + ". " + sI);
                            return false;
                        }

                        //update тех что уже есть
                        //string SQLstrU =
                        //    "UPDATE [AddressesMask] " +
                        //    "SET DateLastUpload = up.DateUpload " +
                        //    "FROM [AddressesMaskUpload] up " +
                        //    "WHERE up.[Hash] = [AddressesMask].[Hash] " +
                        //    "AND up.Host ='" + hostName + "' AND up.StreamNumber =" + _streamNumber;
                        string SQLstrU =
                        "UPDATE [AddressesMask] " +
                        "SET DateLastUpload = s.DateUpload " +
                        "FROM (" +
                                "select [Hash], DateUpload " +
                                "from [AddressesMaskUpload] up " +
                                "WHERE up.Host ='" + hostName + "' AND up.StreamNumber = " + _streamNumber +
                                " except " +
                                "select [Hash], DateLastUpload " +
                                "from [AddressesMask] up " +
                                ") s " +
                        "where s.Hash=[AddressesMask].Hash";

                string sU = ddbs.ExecuteSQLCommand(SQLstrU, _dbConnectionString);
                if (!string.IsNullOrEmpty(sU))
                {
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка обновления времени ссылок в AddressesMask. "
                         + "jobid = " + jobID + ". " + sU);
                    return false;
                }

                if (string.IsNullOrEmpty(sI) && string.IsNullOrEmpty(sU))
                {
                    //delete этих строк
                    string SQLstrD =
                        "DELETE FROM [AddressesMaskUpload] " +
                        "WHERE Host ='" + hostName + "' AND StreamNumber =" + _streamNumber;

                    string sD = ddbs.ExecuteSQLCommand(SQLstrD, _dbConnectionString);
                    if (!string.IsNullOrEmpty(sD))
                    {
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка удаления ссылок из AddressesMaskUpload. "
                             + "jobid = " + jobID + ". " + sD);

                        return false;
                    }
                }

                conn.Close();
                return true;
            }
            else
            {
                return false;
            }
            }
            catch (Exception ex) { Console.WriteLine(ex.Message); }
            finally
            { conn.Close(); conn.Dispose(); }
            return false;
        }
コード例 #5
0
ファイル: DataDBJobs.cs プロジェクト: molec1/MySPM_NewParsers
        private string[][] GetJobs(string[] siteBusy)
        {

            string[][] jobs = new string[0][];

            DataDBService ddbs = new DataDBService();

            //Создание обьекта для соединения
            SqlConnection conn = ddbs.GetDBCon(_dbConnectionString);

            if (conn != null)
            {

                string filterSiteBusy = "";
                for (int i = 0; i < siteBusy.Length; i++)
                {
                    if (!string.IsNullOrEmpty(siteBusy[i]))
                    {
                        //проверка для каждого занятого потока какой сайт он парсит, 
                        //чтобы этот же парсер в другой поток не взяле такой же сайт
                        filterSiteBusy = filterSiteBusy + " and Site <> '" + siteBusy[i].Trim() + "'";
                    }
                }
                // Assumes that connection is a valid SqlConnection object.
                //берем строи из таблицы, которые не заняты и количество рестартов < допустимых рестартов
                string SQLstr =
                  "SELECT top 20 [ID]"
                + ",[ParserName]"
                + ",[Encoding]"
                + ",[FirstPage]"
                + ",[PageCount]"
                + ",[DelayFrom]"
                + ",[DelayTo]"
                + ",[IpProxy]"
                + ",[PortProxy]"
                + ",[StartPage]"
                + ",[WebPreAuthentificationPage]"
                + ",[WebAuthentificationPage]"
                + ",[WebConnectionString]"
                + ",[Busy]"
                + ",[Site]"
                + ",[Source]"
                + ",[SourceDescription]"
                + ",[TimeInHours]"
                + ",[ResetTimeInMinutes]"
                + ",[AllowRestarts]"
                + ",[NumberOfRestart]"
                + ",[PathForPhoto]"
                + " FROM ParsersJob"
                + " WHERE StartUp=1 AND Start=1 AND isnull(Busy,0) = 0 and isnull(NumberOfRestart,0)<=isnull(AllowRestarts,1) "
                + "   AND len(rtrim(ltrim(isnull(Site,' ')))) >0"
                + filterSiteBusy
                + " ORDER by LastDate + LastTime ASC";

                SqlCommand SQLCmd = new SqlCommand(SQLstr, conn);
                SqlDataReader MydataReader = SQLCmd.ExecuteReader();

                try
                {
                    if (MydataReader.HasRows)
                    {
                        while (MydataReader.Read())
                        {

                            string[] job = null;
                            object o0 = "";

                            if (MydataReader.IsDBNull(0))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(0).ToString();
                            Array.Resize(ref job, 1); job[0] = (string)o0; //[ID]
                            //Array.Resize(ref job, 1); job[0] = "70";

                            if (MydataReader.IsDBNull(1))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(1).ToString();
                            Array.Resize(ref job, 2); job[1] = (string)o0;//[ParserName]
                            //Array.Resize(ref job, 2); job[1] = "GilcomGotovoeDataCollector";

                            if (MydataReader.IsDBNull(2))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(2).ToString();
                            Array.Resize(ref job, 3); job[2] = (string)o0;//[Encoding]
                            //Array.Resize(ref job, 3); job[2] = "UTF8";

                            if (MydataReader.IsDBNull(3))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(3).ToString();
                            Array.Resize(ref job, 4); job[3] = (string)o0;//[FirstPage]
                            //Array.Resize(ref job, 4); job[3] = "1";

                            if (MydataReader.IsDBNull(4))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(4).ToString();
                            Array.Resize(ref job, 5); job[4] = (string)o0;//[PageCount]
                            //Array.Resize(ref job, 5); job[4] = "10";

                            if (MydataReader.IsDBNull(5))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(5).ToString();
                            Array.Resize(ref job, 6); job[5] = (string)o0;//[DelayFrom]
                            //Array.Resize(ref job, 6); job[5] = "0";//[DelayFrom]

                            if (MydataReader.IsDBNull(6))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(6).ToString();
                            Array.Resize(ref job, 7); job[6] = (string)o0;//[DelayTo]
                            //Array.Resize(ref job, 7); job[6] = "0";

                            if (MydataReader.IsDBNull(7))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(7).ToString();
                            Array.Resize(ref job, 8); job[7] = (string)o0;//[IpProxy]
                            //Array.Resize(ref job, 8); job[7] = "";

                            if (MydataReader.IsDBNull(8))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(8).ToString();
                            Array.Resize(ref job, 9); job[8] = (string)o0;//[PortProxy]
                            //Array.Resize(ref job, 9); job[8] = "0";

                            if (MydataReader.IsDBNull(9))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(9).ToString();
                            Array.Resize(ref job, 10); job[9] = (string)o0;//[StartPage]
                            //Array.Resize(ref job, 10); job[9] = "http://homes.gilcom.ru/sell/?intOption11%5B1%5D=&intOption2=250&intOption3Fake=&intOption25=&strOption25=&objectHomeNumber=&intOption5%5B3%5D=&intOption5%5B6%5D=&intOption1%5B3%5D=&intOption1%5B6%5D=&intOption12%5B1%5D=&typeOfOwner=allOwner&other=1&_owner=&btn=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8&intOption6%5B3%5D=&intOption6%5B6%5D=&intOption7%5B3%5D=&intOption7%5B6%5D=&intOption14%5B3%5D=&intOption14%5B6%5D=&intOption27%5B3%5D=&intOption27%5B6%5D=&intOption10%5B1%5D=&intOption13%5B1%5D=&intOption15%5B1%5D=&intOption9%5B3%5D=&intOption9%5B6%5D=&intOption8%5B3%5D=&intOption8%5B6%5D=&period=&on_page=50&by=_orderDate&order=DESC";

                            if (MydataReader.IsDBNull(10))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(10).ToString();
                            Array.Resize(ref job, 11); job[10] = (string)o0;//[WebPreAuthentificationPage]
                            //Array.Resize(ref job, 11); job[10] = "";

                            if (MydataReader.IsDBNull(11))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(11).ToString();
                            Array.Resize(ref job, 12); job[11] = (string)o0;//[WebAuthentificationPage]
                            //Array.Resize(ref job, 12); job[11] = "";//[WebAuthentificationPage]

                            if (MydataReader.IsDBNull(12))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(12).ToString();
                            Array.Resize(ref job, 13); job[12] = (string)o0;//[WebConnectionString]
                            //Array.Resize(ref job, 13); job[12] = "";//[WebConnectionString]

                            if (MydataReader.IsDBNull(13))
                                o0 = "false";
                            else
                                o0 = MydataReader.GetBoolean(13).ToString();
                            Array.Resize(ref job, 14); job[13] = (string)o0; //[Busy]
                            // Array.Resize(ref job, 14); job[13] = "False"; //[Busy]

                            if (MydataReader.IsDBNull(14))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(14).ToString();
                            Array.Resize(ref job, 15); job[14] = (string)o0;//[Site]
                            //Array.Resize(ref job, 15); job[14] = "gilkcom.ru (готовое)  ";//[Site]

                            if (MydataReader.IsDBNull(15))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(15).ToString();
                            Array.Resize(ref job, 16); job[15] = (string)o0;//[Source]
                            //Array.Resize(ref job, 16); job[15] = "ЖИЛКОМ квартиры";//[Source]

                            if (MydataReader.IsDBNull(16))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(16).ToString();
                            Array.Resize(ref job, 17); job[16] = (string)o0;//[SourceDescription]
                            //Array.Resize(ref job, 17); job[16] = "Красноярск Gilcom готовое день";//[SourceDescription]

                            if (MydataReader.IsDBNull(17))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(17).ToString();
                            Array.Resize(ref job, 18); job[17] = (string)o0;//[TimeInHours]
                            //Array.Resize(ref job, 18); job[17] = "20";//[TimeInHours]

                            if (MydataReader.IsDBNull(18))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(18).ToString();
                            Array.Resize(ref job, 19); job[18] = (string)o0;//[ResetTimeInMinutes]
                            //Array.Resize(ref job, 19); job[18] = "15";//[ResetTimeInMinutes]

                            if (MydataReader.IsDBNull(19))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(19).ToString();
                            Array.Resize(ref job, 20); job[19] = (string)o0;//[AllowRestarts]
                            //Array.Resize(ref job, 20); job[19] = "20";//[AllowRestarts]

                            if (MydataReader.IsDBNull(20))
                                o0 = "0";
                            else
                                o0 = MydataReader.GetInt32(20).ToString();
                            Array.Resize(ref job, 21); job[20] = (string)o0;//[NumberOfRestart]
                            //Array.Resize(ref job, 21); job[20] = "0";//[NumberOfRestart]

                            if (MydataReader.IsDBNull(21))
                                o0 = "";
                            else
                                o0 = MydataReader.GetSqlString(21).ToString();
                            Array.Resize(ref job, 22); job[21] = (string)o0;//[PathForPhoto]
                            //Array.Resize(ref job, 22); job[21] = "\\\\195.208.47.9\\ParserPhotos";

                            Array.Resize(ref jobs, jobs.Count() + 1);
                            jobs[jobs.Count() - 1] = job;
                        }
                    }
                }
                catch (SystemException ex)
                {
                    string s = ex.Message;
                    ddbs.WriteErrorMessage(_dbConnectionString, 0, null, "Ошибка четния задания" + s);
                }

                conn.Close();
            }
            return jobs;
        }
コード例 #6
0
ファイル: HTTPClient.cs プロジェクト: molec1/MySPM_NewParsers
        public HttpWebResponse Request_Post(string path, string post_body, bool bAutoRedirect)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(path);
                if (_useProxyHTTP)
                    httpWebRequest.Proxy = new WebProxy(_ipProxyHTTP, _portProxyHTTP);

                httpWebRequest.AllowAutoRedirect = bAutoRedirect;
                httpWebRequest.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    httpWebRequest.CookieContainer.Add(Cooks);
                }
                httpWebRequest.UserAgent = userAgents[new Random().Next(0, (userAgents.Count() - 1))];
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(post_body);
                httpWebRequest.ContentLength = ByteQuery.Length;
                Stream QueryStream = httpWebRequest.GetRequestStream();
                QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
                QueryStream.Close();
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
                if (httpWebResponse.Cookies != null)
                {
                    Cooks.Add(httpWebResponse.Cookies);
                }
                return httpWebResponse;
            }
            catch (WebException ex)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, path, ex.Message);
                return ex.Response as HttpWebResponse;
            }
        }
コード例 #7
0
ファイル: DataDBJob.cs プロジェクト: molec1/MySPM_NewParsers
        private string[] GetJob(string[] siteBusy)
        {

            string[] job = null;

            DataDBService ddbs = new DataDBService();

            //Создание обьекта для соединения
            {
                string filterSiteBusy = "";
                for (int i = 0; i < siteBusy.Length; i++)
                {
                    if (!string.IsNullOrEmpty(siteBusy[i]))
                    {
                        filterSiteBusy = filterSiteBusy + " and Site <> '" + siteBusy[i].Trim() + "'";
                    }
                }
                // Assumes that connection is a valid SqlConnection object.
                string SQLstr =
                  "SELECT top 1 [ID]"
                + ",[ParserName]"
                + ",[Encoding]"
                + ",[FirstPage]"
                + ",[PageCount]"
                + ",[DelayFrom]"
                + ",[DelayTo]"
                + ",[IpProxy]"
                + ",[PortProxy]"
                + ",[StartPage]"
                + ",[WebPreAuthentificationPage]"
                + ",[WebAuthentificationPage]"
                + ",[WebConnectionString]"
                + ",[Busy]"
                + ",[Site]"
                + ",[Source]"
                + ",[SourceDescription]"
                + ",[TimeInHours]"
                + ",[ResetTimeInMinutes]"
                + ",[AllowRestarts]"
                + ",[NumberOfRestart]"
                + ",[PathForPhoto]"
                + ", cast((cast(cast(dateend as date) as nvarchar(455))+' '+spltime) as datetime)sdate"
                + " FROM [PJobView]"
                + " WHERE StartUp=1 /*AND Start=1*/ AND isnull(Busy,0) = 0 and isnull(NumberOfRestart,0)<=isnull(AllowRestarts,1) "

                + " and cast((cast(cast(current_timestamp as date) as nvarchar(455))+' '+spltime) as datetime) > datebegin "
                + " and cast((cast(cast(current_timestamp as date) as nvarchar(455))+' '+spltime) as datetime) < current_timestamp "
                    //+ "   AND len(rtrim(ltrim(isnull(Site,' ')))) >0"
                + " AND ParserName not like 'avito%' "

                //+ " AND ParserName not like '%irr%' "

                + " AND ParserName not like 'domofond%' "
                //+ " and LastDate< DATEADD(hour, -12, CURRENT_TIMESTAMP)"
                + filterSiteBusy
                + " ORDER by sdate, LastDate ASC";
                
                
                using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString))

                    if (conn != null)
                    {
                        SqlCommand SQLCmd = new SqlCommand(SQLstr, conn);
                        SqlDataReader MydataReader = SQLCmd.ExecuteReader();

                        try
                        {
                            if (MydataReader.HasRows)
                            {
                                while (MydataReader.Read())
                                {

                                    object o0 = "";

                                    if (MydataReader.IsDBNull(0))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(0).ToString();
                                    Array.Resize(ref job, 1); job[0] = (string)o0; //[ID]

                                    if (MydataReader.IsDBNull(1))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(1).ToString();
                                    Array.Resize(ref job, 2); job[1] = (string)o0;//[ParserName]

                                    if (MydataReader.IsDBNull(2))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(2).ToString();
                                    Array.Resize(ref job, 3); job[2] = (string)o0;//[Encoding]

                                    if (MydataReader.IsDBNull(3))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(3).ToString();
                                    Array.Resize(ref job, 4); job[3] = (string)o0;//[FirstPage]

                                    if (MydataReader.IsDBNull(4))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(4).ToString();
                                    Array.Resize(ref job, 5); job[4] = (string)o0;//[PageCount]

                                    if (MydataReader.IsDBNull(5))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(5).ToString();
                                    Array.Resize(ref job, 6); job[5] = (string)o0;//[DelayFrom]

                                    if (MydataReader.IsDBNull(6))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(6).ToString();
                                    Array.Resize(ref job, 7); job[6] = (string)o0;//[DelayTo]

                                    if (MydataReader.IsDBNull(7))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(7).ToString();
                                    Array.Resize(ref job, 8); job[7] = (string)o0;//[IpProxy]

                                    if (MydataReader.IsDBNull(8))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(8).ToString();
                                    Array.Resize(ref job, 9); job[8] = (string)o0;//[PortProxy]

                                    if (MydataReader.IsDBNull(9))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(9).ToString();
                                    Array.Resize(ref job, 10); job[9] = (string)o0;//[StartPage]

                                    if (MydataReader.IsDBNull(10))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(10).ToString();
                                    Array.Resize(ref job, 11); job[10] = (string)o0;//[WebPreAuthentificationPage]

                                    if (MydataReader.IsDBNull(11))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(11).ToString();
                                    Array.Resize(ref job, 12); job[11] = (string)o0;//[WebAuthentificationPage]

                                    if (MydataReader.IsDBNull(12))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(12).ToString();
                                    Array.Resize(ref job, 13); job[12] = (string)o0;//[WebConnectionString]

                                    if (MydataReader.IsDBNull(13))
                                        o0 = "false";
                                    else
                                        o0 = MydataReader.GetBoolean(13).ToString();
                                    Array.Resize(ref job, 14); job[13] = (string)o0; //[Busy]


                                    if (MydataReader.IsDBNull(14))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(14).ToString();
                                    Array.Resize(ref job, 15); job[14] = (string)o0;//[Site]

                                    if (MydataReader.IsDBNull(15))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(15).ToString();
                                    Array.Resize(ref job, 16); job[15] = (string)o0;//[Source]

                                    if (MydataReader.IsDBNull(16))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(16).ToString();
                                    Array.Resize(ref job, 17); job[16] = (string)o0;//[SourceDescription]

                                    if (MydataReader.IsDBNull(17))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(17).ToString();
                                    Array.Resize(ref job, 18); job[17] = (string)o0;//[TimeInHours]

                                    if (MydataReader.IsDBNull(18))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(18).ToString();
                                    Array.Resize(ref job, 19); job[18] = (string)o0;//[ResetTimeInMinutes]

                                    if (MydataReader.IsDBNull(19))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(19).ToString();
                                    Array.Resize(ref job, 20); job[19] = (string)o0;//[AllowRestarts]

                                    if (MydataReader.IsDBNull(20))
                                        o0 = "0";
                                    else
                                        o0 = MydataReader.GetInt32(20).ToString();
                                    Array.Resize(ref job, 21); job[20] = (string)o0;//[NumberOfRestart]

                                    if (MydataReader.IsDBNull(21))
                                        o0 = "";
                                    else
                                        o0 = MydataReader.GetSqlString(21).ToString();
                                    Array.Resize(ref job, 22); job[21] = (string)o0;//[PathForPhoto]
                                    if (o0 != null)
                                        GC.SuppressFinalize(o0);
                                    break; // читаем одну запись
                                }
                            }
                        }
                        catch (SystemException ex)
                        {
                            string s = ex.Message;
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка четния задания" + _parserName + " " + _sourceDescription + ". " + s);
                        }
                        finally
                        {
                            if (MydataReader != null)
                            { MydataReader.Close(); GC.SuppressFinalize(MydataReader); }
                            if (SQLCmd != null)
                            { SQLCmd.Dispose(); GC.SuppressFinalize(SQLCmd); }
                            if (conn != null)
                            {
                                conn.Close();
                                conn.Dispose();
                                GC.SuppressFinalize(conn);
                            }
                        }
                    }
            }
            return job;
        }
コード例 #8
0
        //---------------------------

        public int NStartProcessingDirect(int jobID)
        {
            int status = 0;
            bool nextPage = true;
            HtmlDocument document = WebClientPage();


            if (document != null)
            {
                int addressescount = 0;
                int maxi = 0;
                try
                {
                    int countPagesTotal = GetPageCount(document, _startAddress);
                    if (countPagesTotal > 0)
                    {
                        for (int i = 0; i < countPagesTotal; i++)
                        {
                            maxi = i;
                            status = 1;
                            if (i + 1 >= _firstPage)
                            {
                                List<bool> valids;
                                List<string> addresses;
                                List<string> stickers;

                                //Получаем страницу для обработки
                                string currentAddress = GetLoadedPage(_startAddress, i);

                                if (_lastAddress != currentAddress)
                                {
                                    _lastAddress = currentAddress;
                                    try
                                    {
                                        // Запрос страницы с количеством объявлений
                                        if (currentAddress != _startAddress)
                                            document = WebClientPage(new WebClient(), _lastAddress);

                                        if (document != null)
                                        {
                                            //Получаем список интересных объявлений
                                            valids = GetValidObjects(document);

                                            //Получаем список ссылок на странице
                                            addresses = GetAddressList(document, valids);

                                            //Получаем список стикеров на странице
                                            stickers = GetStickers(document, valids);

                                            if (valids != null && (addresses != null || stickers != null))
                                            {
                                                if (valids.Count > 0 && addresses.Count == stickers.Count) //|| (addresses.Count > 0 && stickers.Count > 0 && addresses.Count == stickers.Count))
                                                {
                                                    System.Threading.Thread.Sleep(new Random().Next(1000, 4000));

                                                    string hostName = Dns.GetHostName();

                                                    //--проверка заинсертилось ли AddressesMaskUpload
                                                    bool ifInsert = InsertIntoAddressesUpload(addresses, stickers, jobID, hostName);
                                                    int iK = 0;
                                                    while (!ifInsert && iK < 5)
                                                    {
                                                        iK++;
                                                        System.Threading.Thread.Sleep(new Random().Next(5000, 10000));
                                                        ifInsert = InsertIntoAddressesUpload(addresses, stickers, jobID, hostName);
                                                    }

                                                    //-------

                                                    if (ifInsert)
                                                    {
                                                        bool bb = false;
                                                        while (!bb)
                                                        {

                                                            if (IUDAdressesMask(hostName, jobID))
                                                            {
                                                                addressescount = addresses.Count;
                                                                nextPage = NSetJobState(jobID, i + 1, countPagesTotal, addresses.Count, jobID, document);
                                                                if (!nextPage)
                                                                {
                                                                    DataDBExtention ddbe = new DataDBExtention();
                                                                    ddbe.NSetStatistics(jobID, _dbConnectionString, hostName, _streamNumber);
                                                                    //помечаем удаленными ссылки
                                                                    ddbe.NSetDeletedAddresses(jobID, _dbConnectionString);
                                                                    //возвращаем из удаленных ссылок
                                                                    //ddbe.NSetUnDeletedAddresses(jobID, _dbConnectionString);
                                                                    //03/090/14 убрала. deleted снимаю во время обновления даты последней загрузки ссылки
                                                                }
                                                                bb = true;
                                                            }
                                                            else
                                                                System.Threading.Thread.Sleep(new Random().Next(100, 300));
                                                        }
                                                    }
                                                    //тут надо отписываться, что он спарсил и сколько ссылок
                                                }
                                                else
                                                {
                                                    DataDBService ddbs = new DataDBService();
                                                    ddbs.WriteErrorMessage(_dbConnectionString, 0, _lastAddress, "Ахтунг. Стикеры/ссылки. jobID=" + jobID + ". ссылок - " + addresses.Count + ", стикеров - " + stickers.Count + ", valids - " + valids.Count + ". Document: " + document.DocumentNode.InnerHtml);
                                                    //если раскомментить, то парсер останавливается и больше не работает
                                                    //return status = 17; 

                                                }
                                            }
                                            else
                                            {
                                                status = 3;
                                                break;
                                            }

                                            // Досрочный выход из цикла по страницам
                                            // Достигнуто заданное количество страниц
                                            if (i + 1 >= _firstPage - 1 + _pageCount || !nextPage)
                                            {
                                                break;
                                            }
                                            // Исчерпано время (в часах)
                                            DateTime dateTime = DateTime.Now;
                                            if ((dateTime.Year - _dateTimeBegin.Year) * 365 * 24
                                              + (dateTime.DayOfYear - _dateTimeBegin.DayOfYear) * 24
                                               + dateTime.Hour - _dateTimeBegin.Hour
                                                > _timeInHours)
                                            {
                                                status = 2;
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            status = 4;
                                            break;
                                        }
                                    }
                                    catch { }
                                    finally
                                    {

                                        if (document != null)
                                            GC.SuppressFinalize(document);
                                    }
                                }
                                else
                                {
                                    status = 5;
                                    break;
                                }
                            }
                        }
                    }
                    else
                        status = 9;
                }
                catch { }
                finally
                {
                    NSetJobState(jobID, maxi + 1, maxi + 1, addressescount, jobID, document);
                    if (document != null)
                        GC.SuppressFinalize(document);
                }
            }
            else
            {
                NSetJobState(jobID, 0, 0, 0, jobID, null);
                status = 10;
            }

            return status;

        }
コード例 #9
0
        private bool NSetJobState(int id, int currentPage, int countPagesTotal, int CountAnnouncement, int jobid, HtmlDocument doc)
        {
            // текущие дата и время
            DateTime dateTime = DateTime.Now; //new DateTime();
            string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

            using (DataDBService ddbs = new DataDBService())
            {
                try
                {
                    //update
                    string SQLstr = "UPDATE [PJobUpdate] SET "
                                         + "  StartType=1"
                                         + " ,LastDate='" + dt + "'"
                        //+ " ,LastDocument= '" + doc.DocumentNode.InnerHtml.Replace("'", "''").Substring(0,999) + "'"
                                         + " ,CurrentPage=" + currentPage.ToString()
                                         + " ,CountPagesTotal=" + countPagesTotal.ToString()
                                         + " ,CountAnnouncement=CountAnnouncement+" + CountAnnouncement.ToString()
                                         + " ,Complete=" + (currentPage + 1 == _firstPage + _pageCount
                                                         || currentPage == countPagesTotal ? 1 : 0).ToString()
                        /* статус = 1  фиксируется в общем порядке
                        + (currentPage + 1 == _firstPage + _pageCount
                                        || currentPage == countPagesTotal ? " ,ParserStatus=1" : "")
                        */
                                         + (currentPage + 1 == _firstPage + _pageCount
                                         || currentPage == countPagesTotal ? " ,DateEnd='" + dt + "'" : "")
                                         + "  Where ID = " + id.ToString();
                    string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);

                    if (!string.IsNullOrEmpty(s))
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. "
                            + jobid + ".");
                }
                finally
                { ddbs.Dispose();}
            }
            return (currentPage + 1 == _firstPage + _pageCount
                 || currentPage == countPagesTotal ? false : true);
        }
コード例 #10
0
ファイル: DataDBJob.cs プロジェクト: molec1/MySPM_NewParsers
        public void JobToNoBusy()
        {
            // при остановке сервиса
            // остающиеся в состоянии занято

            // имя хоста
            string hostName = Dns.GetHostName();
            //string ipAddress = "";

            // IP хоста
            IPHostEntry ipEntry = Dns.GetHostEntry(hostName);

            string SQLstr = "UPDATE PJobUpdate SET "
                  + "  StartType=6"
                  + " ,Busy=0, Start=1,  FirstPage = currentpage "
                  // --
                  + " Where "
                  + " Host = '" + hostName + "'"
                  //+ " and IP = '" + ipAddress + "'"
                  + " and Busy=1";

            using (DataDBService ddbs = new DataDBService())
            {
                string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);

                if (!string.IsNullOrEmpty(s))
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "JobToNoBusy. не смог выставить Start=1, Busy =0, работавшим задачам при остановке сервиса");

                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи изменения состояния задания по зависанию в занято при остановке сервиса. "
                         + _parserName + " " + _sourceDescription + ". " + s);
                }
            }
        }
コード例 #11
0
        //---------------------------
        public int NStartProcessingAuthentification(int jobID)
        {
            int status = 0;

            //Пишем последнюю страницу в файл
            //Создается каталог для контроля считанной странички
            /*DirectoryInfo _directoryInfo = new DirectoryInfo(Path.GetDirectoryName(Application.ExecutablePath) + "\\OUT");
            if (!_directoryInfo.Exists)
            {
                _directoryInfo.Create();
            }*/

            HTTPClient client = new HTTPClient(_dbConnectionString, "MySession", _ipProxy, _portProxy, _streamNumber); ;
            bool nextPage = true;
            string sHTML = "";
            string address = "";
            string message = "";
            HtmlDocument document = new HtmlDocument();
            if (!_webAuthentification) // Аунтификация
            {
                HttpWebResponse httpWebResponse = client.Request(_webPreAuthentificationAddress); //("http://yarsk24.ru");
                if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                    httpWebResponse.Close();
                    httpWebResponse = client.Request_Post(_webAuthentificationAddress, _webConnectionString); //("http://yarsk24.ru/index/sub/", "user=zero2001&password=2001&rem=1&a=2&ajax=1&rnd=038&_tp_=xml");
                    if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                    {
                        Stream stream = httpWebResponse.GetResponseStream();
                        using (StreamReader reader = new StreamReader(stream, this.Encoding)) //System.Text.Encoding.GetEncoding(1251))) / System.Text.Encoding.UTF8
                        {
                            sHTML = reader.ReadToEnd();
                        }
                        if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                        {
                            httpWebResponse.Close();
                            _webAuthentification = true;
                        }
                        else
                        {
                            address = _webAuthentificationAddress;
                            message = httpWebResponse.StatusCode.ToString();
                            status = 8;
                        }
                    }
                    else
                    {
                        address = _webAuthentificationAddress;
                        message = httpWebResponse.StatusCode.ToString();
                        status = 7;
                    }
                }
                else
                {
                    address = _webPreAuthentificationAddress;
                    message = httpWebResponse.StatusCode.ToString();
                    status = 6;
                }
            }
            if (status != 0)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(address) ? address : _webAuthentificationAddress, "Ошибка при прохождении аутентификации: " + message);
            }
            if (_webAuthentification) // Запрос страницы с количеством объявлений
            {
                HttpWebResponse httpWebResponse = client.Request(_startAddress);
                if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                    Stream stream = httpWebResponse.GetResponseStream();
                    using (StreamReader reader = new StreamReader(stream, this.Encoding))
                    {
                        sHTML = reader.ReadToEnd();
                        document = new HtmlDocument();
                        document.LoadHtml(sHTML);
                        if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                        {
                            httpWebResponse.Close();
                            document.Save(_directoryInfo + "\\LastPage" + _streamNumber.ToString() + ".html");
                        }
                        else
                        {
                            status = 4;
                            nextPage = false;
                        }
                    }
                }
                else
                {
                    status = 10;
                    nextPage = false;
                }
            }


            if (_webAuthentification && nextPage) // Цикл по страницам
            {
                int countPagesTotal = GetPageCount(document, _startAddress);
                if (countPagesTotal > 0)
                {

                    for (int i = 0; i < countPagesTotal; i++)
                    {
                        status = 1;
                        if (i + 1 >= _firstPage)
                        {
                            List<bool> valids;
                            List<string> addresses;
                            List<string> stickers;

                            //Получаем страницу для обработки
                            string currentAddress = GetLoadedPage(_startAddress, i);

                            if (_lastAddress != currentAddress)
                            {
                                _lastAddress = currentAddress;
                                // Запрос страницы с количеством объявлений
                                document = null;
                                HttpWebResponse httpWebResponse = client.Request(_lastAddress);
                                if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                                {
                                    Stream stream = httpWebResponse.GetResponseStream();
                                    using (StreamReader reader = new StreamReader(stream, this.Encoding))
                                    {
                                        sHTML = reader.ReadToEnd();
                                        document = new HtmlDocument();
                                        document.LoadHtml(sHTML);
                                        if (httpWebResponse != null && httpWebResponse.StatusCode == HttpStatusCode.OK)
                                            httpWebResponse.Close();
                                        else { }
                                    }
                                }

                                if (document != null)
                                {
                                    document.Save(_directoryInfo + "\\LastPage" + _streamNumber.ToString() + ".html");
                                    //Получаем список интересных объявлений
                                    valids = GetValidObjects(document);

                                    //Получаем список ссылок на странице
                                    addresses = GetAddressList(document, valids);

                                    //Получаем список стикеров на странице
                                    stickers = GetStickers(document, valids);
                                    //------------------------------------
                                    if (valids != null && (addresses != null || stickers != null))
                                    {
                                        System.Threading.Thread.Sleep(new Random().Next(1000, 3000));

                                        string hostName = Dns.GetHostName();
                                        if (InsertIntoAddressesUpload(addresses, stickers, jobID, hostName))
                                        {
                                            bool bb = false;
                                            while (!bb)
                                            {

                                                if (IUDAdressesMask(hostName, jobID))
                                                {

                                                    nextPage = NSetJobState(jobID, i + 1, countPagesTotal, addresses.Count, jobID, document);
                                                    if (!nextPage)
                                                    {
                                                        DataDBExtention ddbe = new DataDBExtention();
                                                        ddbe.NSetStatistics(jobID, _dbConnectionString, hostName, _streamNumber);
                                                    }


                                                    //if (valids == null || addresses == null || stickers == null)
                                                    //{
                                                    //    status = 3;
                                                    //    break;
                                                    //}
                                                    bb = true;
                                                }
                                                else
                                                    System.Threading.Thread.Sleep(new Random().Next(100, 300));
                                                //else
                                                //{
                                                //    nextPage = NSetJobState(jobID, i + 1, countPagesTotal, 0, jobID, document);
                                                //    //если что-то, то все равно идем дальше
                                                //    ////может брейк постаивть. например, если таймаут вышел и запрос вывалился
                                                //    ////или оставить как есть и припоследующих запусках оно само заберет неотданные ссылки
                                                //}
                                            }
                                        }
                                        //тут надо отписываться, что он спарсил и сколько ссылок
                                    }
                                    else
                                    {
                                        status = 3;
                                        break;
                                    }

                                    // Досрочный выход из цикла по страницам
                                    // Достигнуто заданное количество страниц
                                    if (i + 1 >= _firstPage - 1 + _pageCount || !nextPage)
                                    {
                                        break;
                                    }
                                    // Исчерпано время (в часах)
                                    DateTime dateTime = DateTime.Now;
                                    if ((dateTime.Year - _dateTimeBegin.Year) * 365 * 24
                                      + (dateTime.DayOfYear - _dateTimeBegin.DayOfYear) * 24
                                       + dateTime.Hour - _dateTimeBegin.Hour
                                        > _timeInHours)
                                    {
                                        status = 2;
                                        break;
                                    }
                                    //----------------------------------------
                                    //    //Обрабатываем каждую ссылку и выбираем необходимую информацию
                                    //    List<DirtyApartments> apartments = CardProcessingAuthentification(addresses, stickers, client);
                                    //    if (apartments != null)
                                    //    {
                                    //        //Делегат
                                    //        if (collectedApartmentsDel != null)
                                    //            nextPage = collectedApartmentsDel(apartments, i + 1, countPagesTotal, _directoryInfo + "\\LastPage" + _streamNumber.ToString() + ".html");
                                    //        // Досрочный выход из цикла по страницам
                                    //        // Достигнуто заданное количество страниц
                                    //        if (i + 1 >= _firstPage - 1 + _pageCount || !nextPage)
                                    //        {
                                    //            break;
                                    //        }
                                    //        // Исчерпано время (в часах)
                                    //        DateTime dateTime = DateTime.Now;
                                    //        if ((dateTime.Year - _dateTimeBegin.Year) * 365 * 24
                                    //          + (dateTime.DayOfYear - _dateTimeBegin.DayOfYear) * 24
                                    //           + dateTime.Hour - _dateTimeBegin.Hour
                                    //            > _timeInHours)
                                    //        {
                                    //            status = 2;
                                    //            break;
                                    //        }

                                    //        if (valids == null || addresses == null || stickers == null)
                                    //        {
                                    //            status = 3;
                                    //            break;
                                    //        }
                                    //    }
                                    //    else
                                    //    {
                                    //        status = 16;
                                    //        break;
                                    //    }
                                }
                                else
                                {
                                    status = 4;
                                    break;
                                }
                            }
                            else
                            {
                                status = 5;
                                break;
                            }
                        }
                    }
                }
                else
                    status = 9;
            }
            else { }
            return status;
        }
コード例 #12
0
ファイル: DataDBJob.cs プロジェクト: molec1/MySPM_NewParsers
        public void JobSchedule()
        {
            // StartUp - не смотрим
            // Начальная страница обычного задания - из поля FirstPageForSchedule
            // Даты старта - из DateStart, если совпадает с текущей датой - текущая дата, иначе 01.01.1900 (скалярная ф-я sfGetJobDate)
            // Времена старта - истина, если текущее время больше не более, чем на minutes минут времени старта, ложь (скалярная ф-я sfGetJobTime)
            // Время в часах с момента DateEnd+TimeEnd - в часах (скалярная ф-я sfGetHoursFromEnd)


            if (GetTuningScheduler()) // данному парсеру разрешена работа планировщиком?
            {
                //StreamWriter _fileWrite;

                //добавлено 24.11.2014

                using (DataDBService ddbs = new DataDBService())
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п1. начинаю...");

                    // ежедневное 
                    //берем id, которые не запущены и не выствлен старт соответствуют (кроме авито,)
                    string SQLstr = "UPDATE PJobUpdate SET "
                                 + "  StartType=2"
                                 + " ,Start=1"
                                 + " ,NumberOfRestart = 0"
                                 + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                                 + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --
                                 + " WHERE ID in  "
                                 + @"
                                    (
                                    SELECT DISTINCT ID FROM PJobView jv 
                                    OUTER APPLY  (select word from	dbo.split (TimeStart, '%,%') )spl
                                    WHERE StartUp=1 
                                    and
                                    
                                    (
                                    --сегоднящние
                                    (
                                    --запланированное время старта меньше текущего времени.
                                     substring(spl.word, patindex('%[^\.]%', spl.word),40)< SUBSTRING(CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0,CHARINDEX('.',CONVERT(nvarchar(32),CONVERT (time, CURRENT_TIMESTAMP)),0)-3)

                                    --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время)
                                    and (CONVERT(datetime,DateBegin,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы
                                    or CONVERT(datetime,DateEnd,104) < convert(datetime,CONVERT (date, CURRENT_TIMESTAMP)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108))
                                    )

                                    or
                                    --для вчерашних

                                    ( 
                                    --дата начала парсинга меньше текущей даты +запланированное время старта (то есть сегодня не стартовала в нужное время)
                                    CONVERT(datetime,DateBegin,104) < convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    --для задач, которые стартуют более одного раза, чтобы выводились остаточные разы
                                    or CONVERT(datetime,DateEnd,104)< convert(datetime,cast (DATEADD(DAY,-1, CURRENT_TIMESTAMP) as date)) +' '+CONVERT(time,substring(spl.word, patindex('%[^\.]%', spl.word),40)+':00',108)
                                    )
                                    )
                                    --and ParserName not like 'avito%' 
                                    and isnull(Busy,0)=0 and isnull(Start,0)=0 
                                    )
                                ";
                    string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {

                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п1. не смог выставить Start задачам " + s);
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п1. не смог выставить Start задачам"
                            + _parserName + " " + _sourceDescription + ". " + s);
                    }



                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. начинаю...");
                    //старт раз в 12 часов для тех, где превышено количество рестартов
                    SQLstr = "UPDATE PJobUpdate SET "
                              + "  StartType=3"
                              + " ,Start=1"
                              + " ,NumberOfRestart = 0"
                              + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                              + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --разница между текущим временем и последней отпиской в базу больше 12 часов
                              + @" Where ID in
                                (
                                SELECT ID FROM PJobView where
                                StartUp=1
                                and NumberOfRestart > AllowRestarts 
                                --and ParserName not like 'avito%' 
                                and DATEDIFF(HOUR, CONVERT(datetime,LastDate,104), CURRENT_TIMESTAMP) > 12
                                )";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п2. не смог выставить Start задачам " + s);

                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, " Schedule. п2. не смог выставить Start задачам, где NumberOfRestart>AllowRestarts и LastTime>12h"
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }




                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п3. начинаю...");

                    //24/11/2014 не совсем понимаю эту ситуацию, видо для тех, кто остался висеть после рестарта сервиса, но сейчас в JobToNoBusy() добавлено выставелние Start=1, скорее всего эта ситуация не повторится
                    // незавершенные / незанятые / не в старте (подхватываются в т.ч. после рестарта сервиса)
                    SQLstr = "UPDATE PJobUpdate SET "
                           + "  StartType=4"
                           + " ,Start=1"
                        // --
                           + " ,FirstPage=isnull((select pv.FirstPageForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),1)"
                           + " ,PageCount=isnull((select pv.PageCountForSchedule from PJobStat pv where PJobUpdate.ID=pv.ID),999)"
                        // --
                           + " Where isnull(Complete,0)=0"
                        //+ " and isnull(Startup,0)=1" //здесь этого не надо
                           + " and isnull(Start,0)=0"
                           + " and isnull(Busy,0)=0"
                           + " and isnull(CurrentPage,0)+1 < isnull(FirstPage,1)+isnull(PageCount,1)" // страниц меньше
                           + " and isnull(NumberOfRestart,0) > 0" // старты были
                           + " ";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п3. не смог выставить Start задачам " + s);
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п3. Ошибка записи изменения состояния задания по незавершено незанято."
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }



                    s = "";
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, " Schedule. п4. начинаю...");
                    // зависшие в состоянии занято 
                    //change - 24/11/2014
                    SQLstr = "UPDATE PJobUpdate SET "
                          + "  StartType=5"
                          + " ,Busy=0, FirstPage = case when CurrentPage > 1 then CurrentPage-1 else 1 end, Start=1 "
                        // --
                          + @" Where ID in
                                (
                                SELECT ID FROM PJobView 
                                where  DATEDIFF(MINUTE, CONVERT(datetime,LastDate,104),CURRENT_TIMESTAMP) > ResetTimeInMinutes 
                                and isnull(Startup,0)=1 and isnull(Busy,0)=1 
                                ) ";
                    s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s))
                    {
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Schedule. п4. не смог выставить Start задачам. " + s);

                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Schedule. п4. не смог выставить Start зависшим задачам (Busy=1)"
                             + _parserName + " " + _sourceDescription + ". " + s);
                    }
                }

            }
        }
コード例 #13
0
ファイル: DataDBJob.cs プロジェクト: molec1/MySPM_NewParsers
        private void SetJobStatus(int id, int status)
        {
            using (DataDBService ddbs = new DataDBService())
            {
                //update
                string SQLstr = "UPDATE [PJobUpdate] SET "
                                      + "  StartType=1"
                                      + " ,ParserStatus=" + status.ToString()
                                      + " Where ID = " + id.ToString();
                string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);

                if (!string.IsNullOrEmpty(s))
                {
                    ddbs.WriteMessageAboutActivity(_dbConnectionString, 10002, "Ошибка записи текущего состояния задания.");

                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. "
                        + _parserName + " " + _sourceDescription + ". " + s + (status != 1 ? "Ошибка: статус " + status.ToString() + "." : ""));
                }

                if (status != 1)
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, _startPage, "Ошибка: статус " + status.ToString() + ". jobID=" + _ID);
            }

            //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
        }
コード例 #14
0
ファイル: DataDBJob.cs プロジェクト: molec1/MySPM_NewParsers
        private bool SetJobToStartOrStop(bool start)
        {
            // имя хоста
            string hostName = Dns.GetHostName();
            string ipAddress = "";

            // IP хоста
            IPHostEntry ipEntry = Dns.GetHostEntry(hostName);
            IPAddress[] addr = ipEntry.AddressList;

            for (int i = 0; i < addr.Length; i++)
            {
                ipAddress = ipAddress + addr[i].ToString() + ";";
            }
            ipAddress = ipAddress.Substring(0, ipAddress.Length - 1);

            // текущие дата и время
            DateTime dateTime = DateTime.Now; //new DateTime();
            //string date = dateTime.Date.ToString("dd.MM.yyyy");
            //string time = dateTime.ToString("HH:mm:ss");
            string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

            using (DataDBService ddbs = new DataDBService())
            {
                if (_numberOfRestart <= _allowRestarts)
                {

                    //версия на 26.11 для того чтобы при рестарте задачи мы не зануляли количество спарсенных ссылок 
                    //и не перезаписывали дату начала парсинга задачи - позволит не потерять новые и обновленные ссылки
                    string SQLstr = "UPDATE PJobUpdate SET "
                            + "  StartType=1"
                            + " ,Busy=" + (start ? 1 : 0).ToString()
                            + (!start ? ",Host = ''" : " ,Host = '" + hostName + "'")
                            + (!start ? ",IP = ''" : " ,IP = '" + ipAddress + "'")
                            + (!start ? " ,ServiceMessage= 'отработал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'"
                                      : " ,ServiceMessage= 'стартовал +" + _parserName + " " + _streamNumber.ToString() + " " + dt + "'")
                            + (start ? " ,Start=0" : "")
                            + (start ? " ,NumberOfRestart=isnull(NumberOfRestart,0)+1" : "")
                            + (start ? " ,LastDocument=''" : "")
                            + (start ? (_numberOfRestart > 0 ? "" : " ,CurrentPage=0") : "")
                            + (start ? " ,CountPagesTotal=0" : "")
                        //+ (start ? (_numberOfRestart > 0 ? "" : " ,CountAnnouncement=0") : "")
                            + (start ? (_numberOfRestart > 0 ? (_firstPage == 1 ? " ,CountAnnouncement=0" : "") : " ,CountAnnouncement=0") : "")
                            + (start ? " ,Complete=0" : "")
                            + (start ? " ,ParserStatus=0" : "")
                            + (start ? (_numberOfRestart > 0 ? "" : " ,DateBegin='" + dt + "'") : "")
                            + (start ? " ,LastDate='" + dt + "'" : "")
                            + "  Where ID = " + _ID.ToString();

                    string s2 = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString);
                    //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString);
                    if (!string.IsNullOrEmpty(s2))
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за ошибки записи задания. "
                            + _parserName + " " + _sourceDescription + ". " + s2);
                    if (_numberOfRestart + 1 > _allowRestarts)
                    {
                        if (!start)
                        {
                            //если превышено количество рестартов. пишем в статистику
                            DataDBExtention ddbe = new DataDBExtention();
                            ddbe.NSetStatistics(_ID, _dbConnectionString, hostName, _streamNumber);

                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов "
                            + _parserName + " " + _sourceDescription + ".");
                        }
                        return false;
                    }
                    return (string.IsNullOrEmpty(s2) ? true : false);
                }
                else // такое не случится, если не будет нарушена логика обработки
                {
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка старта/остановки парсинга из-за превышения заданного количества рестартов "
                    + _parserName + " " + _sourceDescription + ".");
                    return false;
                }
            }
        }
コード例 #15
0
ファイル: DataDBNet.cs プロジェクト: molec1/MySPM_NewParsers
        /// <summary>
        /// Запрашиваем страницу через WebСlient
        /// </summary>
        public HtmlDocument WebClientPage(WebClient c, string address)
        {
            address = !string.IsNullOrEmpty(address) ? address : _startAddress;
            //address = address.Replace("https://m.avito", "http://avito");
            Uri site = new Uri(address);
            HtmlDocument document = new HtmlDocument();
            if (address.Contains("tumen-realty"))
            {
                document = GetPage(site, "GET", GetCookieTumenRealtyCityStar(site));
                //document = this.document;
            }
            else
            {
                if (address.Contains("www.moyareklama.ru"))
                {
                    document = GetPage(site, "GET", GetCookieTumenRealtyCityStar(site));
                    //document = this.document;
                }
                else
                {
                    try
                    {
                        document = GetPage2(site);
                    }
                    catch (WebException ex)
                    {
                        DataDBService ddbs = new DataDBService();
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(address) ? address : _startAddress, ex.Message);
                        document = null;
                    }

                    catch (UriFormatException ex)
                    {
                        DataDBService ddbs = new DataDBService();
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(address) ? address : _startAddress, "ПРОКСИ: " + ex.Message);
                        document = null;
                    }
                    catch (Exception ex)
                    {
                        DataDBService ddbs = new DataDBService();
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, !string.IsNullOrEmpty(address) ? address : _startAddress, "DataDBNet. Ошибка получения страницы: " + ex.Message);
                        document = null;
                    }
                }
            }
            return document;
        }
コード例 #16
0
        public bool ToDB(string tableName, string connectionString)
        {
            if (this.items == null)
                return true;
            if (!this.items.Any())
                return true;
            error = "";
                DataDBService ddbs = new DataDBService();
                bool fl = false;
                List <string> fields=null;
                List<int> PublishedIDs_ = new List<int>();
                List<string> values = null;
                string[] values_field = null;
                string q = "";
                try
                {
                    ContainParsersDatafields(tableName, connectionString);
                    fields = ContainFields(tableName, connectionString, fields);
                    if (fields == null)
                        return false;
                    if (!fields.Any())
                        return false;
                    
                    for (int k = 0; k < this.items.Count() / 1000 + 1; k++)
                    {
                        int c = 0;
                        if (this.items.Count() < 1000)
                            c = this.items.Count();
                        else
                            if (this.items.Count() - k * 1000 > 1000)
                                c = 1000;
                        q = "insert into " + tableName + "(" + String.Join(", ", fields.ToArray()) + ") values ";
                        if (items == null || !this.items.Any())
                            return true;
                            else
                                c = this.items.Count() - k * 1000;
                        values = new List<string>();
                        values_field = new string[fields.Count];
                        //DataTable table = CreateDBTable();
                        if (this.items != null)
                        {
                            for (int i = 0; i < c; i++)
                            {
                                if (this.items[i] != null)
                                    if (this.items[i].GetType() != null)
                                        try
                                        {
                                            for (int j = 0; j < fields.Count; j++)
                                            {
                                                if (this.items[i].GetPropertyValue(fields[j]) != null)
                                                {
                                                    try
                                                    {
                                                        lock (fieldtypes)
                                                            if (!fieldtypes.Keys.Contains(fields[j]))
                                                                fieldtypes.Add(fields[j], this.items[i].GetPropertyValue(fields[j]).GetType().Name);
                                                    }
                                                    catch (Exception exxx) { ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления полей в запрос " + exxx.Message);
                                                    Console.WriteLine("Ошибка добавления полей в запрос " + exxx.Message); fl = false; error = exxx.Message;
                                                    }
                                                    if (fieldtypes[fields[j]] == "String")
                                                        values_field[j] = ("'" + ((string)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).Replace("'", "''") + "'");
                                                    else if (fieldtypes[fields[j]] == "Int32")
                                                        values_field[j] = (((int)(this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString());
                                                    else
                                                        values_field[j] = ("'" + ((this.items[i + k * 1000].GetPropertyValue(fields[j]))).ToString().Replace("'", "''") + "'");
                                                }
                                                else
                                                    values_field[j] = ("null");
                                            }
                                            values.Add( ("(" + String.Join(", ", values_field) + ")"));
                                            try
                                            {
                                                if (this.items[i].GetPropertyValue("AddressParsing") != null)
                                                    PublishedIDs_.Add((int)(this.items[i].GetPropertyValue("AddressParsing")));
                                            }
                                            catch { Console.WriteLine("Ошибка");}
                                        }
                                        catch (Exception exxx)
                                        {
                                            string sss = exxx.Message;
                                            ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString());
                                            Console.WriteLine("Ошибка добавления объявлений в запрос " + sss + ", i = " + i.ToString());
                                            error = sss + " " + q;
                                            fl = false;
                                        }
                            }
                        }
                        if(values!=null)
                        if (values.Any())
                        {
                            q += String.Join(", ", values);
                            string s2 = ddbs.ExecuteSQLCommand(q, connectionString, 29);
                            if (this.items != null)
                                Console.WriteLine("Отправили " + this.items.Count() + " объектов");

                            if (PublishedIDs_!=null)
                            if (PublishedIDs_.Any())
                            {
                                if (!string.IsNullOrEmpty(s2))
                                {
                                    ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка записи объектов в БД " + s2 + " " + q);
                                    Console.WriteLine("Ошибка записи объектов в БД " + s2 + " " + q.Substring(0, 99));
                                    error = s2 + " " + q;
                                    fl = false;
                                }
                                else
                                {
                                        PublishedIDs.AddRange(PublishedIDs_);
                                    fl = true;
                                }
                            }
                            else
                                fl = false;
                        }
                        else
                            fl = true;
                    }
                    //return true;           
                }
                catch (Exception exx)
            {
                if (this.items != null)
                    Console.WriteLine("Не отправили " + this.items.Count() + " объектов"); 
                string s = exx.Message;
                ddbs.WriteErrorMessage(connectionString, 0, null, "Ошибка отправки объявлений2: " + exx.Message);
                Console.WriteLine("Ошибка отправки объявлений2: " + exx.Message);
                fl = false;
                error = s + " " + q;
            }
            finally { if (fields != null) { fields.Clear(); GC.SuppressFinalize(fields); } if (values != null)GC.SuppressFinalize(values); if (values_field != null)GC.SuppressFinalize(values_field); }
            if (!fl)
                    return fl;
           return fl;
        }
コード例 #17
0
ファイル: HTTPClient.cs プロジェクト: molec1/MySPM_NewParsers
        public HttpWebResponse Request(string sUrl, bool bAutoRedirect)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(sUrl);
                if (_useProxyHTTP)
                    httpWebRequest.Proxy = new WebProxy(_ipProxyHTTP, _portProxyHTTP);

                httpWebRequest.UserAgent = userAgents[new Random().Next(0, userAgents.Count() - 1)];
                httpWebRequest.AllowAutoRedirect = bAutoRedirect;
                httpWebRequest.CookieContainer = new CookieContainer();
                if (Cooks != null)
                {
                    httpWebRequest.CookieContainer.Add(Cooks);
                }
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
                if (httpWebResponse.Cookies != null)
                {
                    Cooks.Add(httpWebResponse.Cookies);
                }
                return httpWebResponse;
            }
            catch (WebException ex)
            {
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, sUrl, ex.Message);
                return ex.Response as HttpWebResponse;
            }
        }
コード例 #18
0
        public bool InsertIntoAddressesUpload(List<string> addresses, List<string> stickers, int jobID, string hostName)
        {
            if (addresses.Count == 0)
                return true;
            DateTime now = DateTime.Now;

            DataDBService ddbs = new DataDBService();
            using(SqlConnection conn = ddbs.GetDBCon(_dbConnectionString))
                try
                {
                    if (conn != null && addresses.Count > 0)
                    {
                        DataTable table = new DataTable();
                        table.Columns.Add("JobID", typeof(int));
                        table.Columns.Add("Address", typeof(string));
                        table.Columns.Add("Sticker", typeof(string));
                        table.Columns.Add("DateUpload", typeof(System.Data.SqlTypes.SqlDateTime));
                        table.Columns.Add("Host", typeof(string));
                        table.Columns.Add("StreamNumber", typeof(int));

                        //если пусто количество ссылок, берем количество стикеров - верно для досок
                        int count = (addresses.Count > 0) ? addresses.Count : stickers.Count;
                        for (int k = 0; k < count; k++)
                        {
                            DataRow newRow = table.NewRow();
                            newRow["JobID"] = jobID;
                            newRow["Address"] = addresses[k];
                            newRow["Sticker"] = stickers[k];
                            newRow["DateUpload"] = now;
                            newRow["Host"] = hostName;
                            newRow["StreamNumber"] = _streamNumber;
                            table.Rows.Add(newRow);
                        }
                        SqlBulkCopy sqlBulk = new SqlBulkCopy(_dbConnectionString, SqlBulkCopyOptions.FireTriggers);
                        sqlBulk.DestinationTableName = "AddressesMaskUpload";

                        DataDBSerializer ddbser = new DataDBSerializer();

                        List<string> DBNames = ddbser.GetDBTableFields(sqlBulk.DestinationTableName, _dbConnectionString);
                        foreach (DataColumn column in table.Columns)
                        {
                            string columnName = column.ColumnName;
                            //for (int t = 0; t < DBNames.Count(); t++)
                            {
                                //if (columnName.Trim().ToUpper() == DBNames[t].Trim().ToUpper())
                                //if (DBNames[t].Trim().ToUpper() != "ID")
                                sqlBulk.ColumnMappings.Add(columnName.Trim(), columnName.Trim());
                            }
                        }
                        try
                        {
                            // пишем все на сервер
                            sqlBulk.WriteToServer(table);
                            sqlBulk.Close();
                            return true;
                        }
                        catch (Exception ex)
                        {
                            ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи в AddressesMaskUpload. "
                                                                            + "jobId " + jobID + ". " + ex);

                            return false;
                        }
                        finally
                        {
                            GC.SuppressFinalize(sqlBulk);
                        }
                    }
                    else
                    {
                        //если подключение вернуло null
                        return false;
                    }
                }
                catch (Exception ex) { Console.WriteLine(ex.Message); }
                finally
                { conn.Close(); conn.Dispose(); }
            return false;
        }
コード例 #19
0
        private void _timer_Starter_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _timerStarter.Stop();
            int streamNumber = GetFreeStream();
            if (streamNumber >= 0)
            {
                try
                {
                    // проверка связи с БД и соответствующая отметка
                    //if (CheckDBConnection("SPM таймер запуска стартовал. ", streamNumber, false))
                    {
                        DataDBJob job = null;
                        try
                        {
                                // считаем задание и попытаемя его запустить
                                lock (_siteBusy)
                                {
                                    lock (newjoblockstring)
                                    {
                                        job = new DataDBJob(_dbConnectionString, streamNumber, true, _siteBusy);
                                        if (job != null)
                                        {
                                            if (!String.IsNullOrEmpty(job.Site))
                                            {
                                                if (!string.IsNullOrEmpty(job.Site)) // задание захвачено
                                                {
                                                    _siteBusy[streamNumber] = job.Site; // сайт занят
                                                    lock (_siteBusyStart)
                                                        _siteBusyStart[streamNumber] = DateTime.Now;
                                                }
                                            }
                                            else
                                            {
                                                _timerStarter.Interval = 15000;
                                                Console.WriteLine(DateTime.Now+" no work");
                                            }
                                        }   
                                        else
                                        {
                                            _timerStarter.Interval = 15000;
                                            Console.WriteLine(DateTime.Now+" no work");
                                        }
                                    }
                                }
                                    if (!String.IsNullOrEmpty(job.Site))
                                    {
                                        Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream started job " + job.Site);
                                        //ShowInfoMessage();
                                        _timerStarter.Interval = 1;
                                        //_timerStarter.Start();
                                        _timerStarter.Enabled=true;
                                        job.StartJob();
                                    }

                        }
                        catch (Exception ex) // ловим ошибку плагина
                        {
                            DataDBService ddbs = new DataDBService();
                            lock (_siteBusy)
                            ddbs.WriteErrorMessage(_dbConnectionString, streamNumber, "Сайт " + _siteBusy[streamNumber] + ". Необработанная ошибка плагина", ex.Message);
                            ddbs.Dispose();
                            GC.SuppressFinalize(ddbs);
                        }
                        finally
                        {
                            if (job != null)
                            {
                                lock (_siteBusy)
                                {
                                    if (!string.IsNullOrEmpty(_siteBusy[streamNumber]))
                                    {
                                        Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream finished job " + job.Site);
                                        _siteBusy[streamNumber] = ""; // сайт свободен
                                        _siteBusyStart[streamNumber] = DateTime.MaxValue;
                                        _timerStarter.Interval = 1;
                                        //_timerStarter.Start();
                                        //ShowInfoMessage();
                                    }
                                    else
                                        _timerStarter.Interval = 15000;
                                }
                                { job.Dispose(); GC.SuppressFinalize(job); }
                            }
                                _timerStarter.Start();
                            //CheckDBConnection("SPM таймер запуска остановлен. ", streamNumber, false);
                        }
                    }
                }
                catch (Exception ex) // ловим ошибку соединения с БД
                {
                    Console.WriteLine("Ошибка 5675 "+ex.Message);
                }
                finally
                {
                    lock (_siteBusy)
                        _siteBusy[streamNumber] = ""; // сайт свободен
                }
            }
            else
            {
                _timerStarter.Interval = 15000;
                _timerStarter.Start();
                Console.WriteLine(DateTime.Now + " No free threads");
            }
        }
コード例 #20
0
        public DirtyApartments CardParsing(HtmlDocument page, string address, string sticker, bool ParsePhones = true)
        {
            if (page == null)
                page = new HtmlDocument();
            if (address == null)
                address = "";
            if (sticker == null)
                sticker = "";
            DirtyApartments dirtyApartment = new DirtyApartments();
            try
            {
                //Stopwatch sw = new Stopwatch();
                //sw.Start();
                try
                {
                    SetLink(address, dirtyApartment); // ссылка
                    SetBalcony(page, dirtyApartment); //Устанавливаем наличие балкона
                    SetKindOfObject(dirtyApartment); //Устанавливаем вид объекта
                    SetTimeOfDischarge(dirtyApartment); //Устанавливаем время выгрузки
                    SetYearOfConstruction(page, dirtyApartment); //Устанавливаем год постройки объекта
                    SetCity(page, dirtyApartment); //Устанавливаем город объекта
                    SetDateOfDischarge(dirtyApartment); //Устанавливаем дату выгрузки
                    SetAdDate(page, dirtyApartment); //Устанавливаем дату объявления
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 1 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    SetHouseNumber(page, dirtyApartment); //Установка номера дома
                    SetReliability(dirtyApartment); //Установка достоверности
                    SetLivingArea(page, dirtyApartment); //Установка жилой площади
                    SetAdCaption(page, dirtyApartment); //Установка заголовка объявления
                    SetSignedAnExclusiveAgreement(dirtyApartment); //Установка "Заключен эксклюзивный договор"
                    SetNameOfContactPerson(page, dirtyApartment); //Установка имени контактного лица
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 1.5 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    SetSource(dirtyApartment); //Установка сайта-источника информации
                    SetNumberOfRooms(page, dirtyApartment); //Установка количества комнат
                    SetCompanyName(page, dirtyApartment); //Установка наименования компании-посредника
                    SetKitchenArea(page, dirtyApartment); //Установка площади кухни
                    SetLoggia(page, dirtyApartment); //Установка информации по лоджии
                    SetMicrodistrict(page, dirtyApartment); //Установка микрорайона
                    SetWallMaterial(page, dirtyApartment); //Установка материала стен
                    //SetObjectName(dirtyApartment); //Установка наименования объекта
                    SetObjectName(page, dirtyApartment); //Установка наименования
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    string s1 = ex.Source;
                    string s2 = ex.StackTrace;
                    Exception o1 = ex.InnerException;
                    object o3 = ex.TargetSite;
                    object o4 = ex.Data;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 2 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    SetAdNumber(page, dirtyApartment); //Установка номера объявления
                    SetArea(page, dirtyApartment); //Установка области
                    SetCommonArea(page, dirtyApartment); //Установка общей площади
                    SetOperation(dirtyApartment); //Установка операции
                    SetLandmark(page, dirtyApartment); //Установка ориентира
                    SetLayout(page, dirtyApartment); //Установка типа планировки
                    SetNote(page, dirtyApartment); //Установка примечания
                    SetViews(page, dirtyApartment); //Установка количества просмотров
                    SetDistrict(page, dirtyApartment); //Установка района
                    SetSite(page, dirtyApartment); //Установка сайта
                    SetWc(page, dirtyApartment); //Установка типа санузла
                    //SetLink(address, dirtyApartment); //Установка ссылки на объявление
                    SetAdText(page, dirtyApartment);//Установка текста объявления
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 3 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                if (ParsePhones)
                {
                    try
                    {
                        if (address.Contains("sibdom"))
                        {
                            if (!string.IsNullOrEmpty(sticker))
                                SetSticker(sticker, dirtyApartment);//Установка данных из стикера
                        }
                        SetPhoneNumbers(page, dirtyApartment); //Устанавливаем номера телефонов
                    }
                    catch (Exception ex)
                    {
                        string s = ex.Message;
                        Console.WriteLine("Ошибка парсинга телефонов "+s);
                        //Console.WriteLine(s);
                        DataDBService ddbs = new DataDBService();
                        ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга телефонов " + s);
                        if (dirtyApartment != null)
                        { dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment); }
                        return null;
                    }
                }
                try
                {
                    //SetTypeOfContactPerson(dirtyApartment);//Установка типа контактного лица
                    SetTypeOfContactPerson(page, dirtyApartment);//Установка типа контактного лица (два параметра)
                    //SetTypeOfPayment(dirtyApartment);//Установка типа оплаты услуг
                    SetTypeOfPayment(page, dirtyApartment);//Установка типа оплаты услуг (два параметра)
                    SetCooker(page, dirtyApartment);//Установка типа плиты
                    SetStreet(page, dirtyApartment);//Установка улицы
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 4 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    //if (Dns.GetHostName().Substring(0, 4) == "pars")
                    if(page!=null && dirtyApartment!=null)
                        SetPhoto(page, dirtyApartment);//Установка ссылок на фотографии
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    string hostName = Dns.GetHostName();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка сохранения фото " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    SetPrice(page, dirtyApartment);//Установка цены
                    SetEmail(page, dirtyApartment);//Установка электронной почты
                    SetStorey(page, dirtyApartment);//Установка этажа
                    SetNumberOfStoreys(page, dirtyApartment);//Установка этажности
                    SetDeveloper(page, dirtyApartment); //Установка застройщика

                    SetQuarterOfDelivery(page, dirtyApartment); //Установка информации по кварталу сдачи с сайта
                    SetYearOfDelivery(page, dirtyApartment); //Установка информации по году сдачи с сайта
                    SetFurnishType(page, dirtyApartment); //Установка информации по типу отделки с сайта
                    SetHousingComplex(page, dirtyApartment); //Установка информации по ЖК с сайта
                    SetStreetUnderConstruction(page, dirtyApartment); /// Выборка информации по строительному адресу - улица  с сайта
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 5 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                try
                {
                    SetHouseUnderConstruction(page, dirtyApartment); /// Выборка информации по строительному адресу - дом  с сайта
                    SetNewBuilding(page, dirtyApartment); /// Выборка дополнительной информации по новостройке с сайта
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 6 " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                /// 
                try
                {
                    if (!string.IsNullOrEmpty(sticker))
                        SetSticker(sticker, dirtyApartment);//Установка данных из стикера
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    DataDBService ddbs = new DataDBService();
                    ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга в установке стикера " + s);
                    dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                    return null;
                }
                if (CheckData(dirtyApartment))
                    return dirtyApartment;
                else
                {
                    Console.WriteLine("Объявление не прошло проверку");
                    return null;
                }
            }
            catch (Exception ex)
            {
                string s = ex.Message;
                DataDBService ddbs = new DataDBService();
                ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, address, "Ошибка парсинга 9 " + s);
                dirtyApartment.Dispose(); GC.SuppressFinalize(dirtyApartment);
                return null;
            }
            //Console.WriteLine("Необъяснимым образом код добрался до сюда");
            //return null;
        }