Example #1
0
        public static void run()
        {
            var db = new SqliteDB("myStuff.db");

            Console.WriteLine($"Database is at {db.DatabaseFileName}");

            // Create a DB Schema
            db.CreateTables()
            .Add <IntSample>()
            .Commit();

            // reset before sample
            db.Execute("DELETE FROM IntSample");

            var bobAccount = new IntSample()
            {
                Id   = 0, // will be generated
                Name = "bob"
            };
            //When using INT PrimaryKeys, the column becomes the sqlite's _rowid_
            var id = db.InsertOrReplace(bobAccount);

            Console.WriteLine($"Inserted with ID {id}");
            // bobAccount.Id is still zero

            // update bob
            bobAccount = db.Get <IntSample>(id);
            Console.WriteLine($"Name is still `{bobAccount.Name}`");
            Console.WriteLine($"Previous inserted ID was: `{id}` and  bobAccount.Id: `{bobAccount.Id}`");

            bobAccount.Name = "Bob's account";
            var id2 = db.InsertOrReplace(bobAccount);

            foreach (var bobs in db.GetAll <IntSample>())
            {
                Console.WriteLine($"Id: {bobs.Id} Name: {bobs.Name}");
            }
        }
        public static void run()
        {
            SqliteDB db = new SqliteDB("myStuff.db");

            Console.WriteLine($"Database is at {db.DatabaseFileName}");

            // Create a DB Schema
            var result = db.CreateTables()
                         .Add <MyData>()
                         .Commit();

            if (result.Length > 0 && result[0].WasTableCreated)
            {
                Console.WriteLine("A new table was created!");
            }

            var d = new MyData()
            {
                MyId           = (int)DateTimeOffset.Now.ToUnixTimeSeconds(),
                MyName         = "My name is bob",
                MyBirthDate    = DateTime.Now,
                MyUID          = Guid.Empty, // When empty, a new Guid will be generated
                MyWebsite      = new Uri("http://example.com"),
                MyFavColor     = System.Drawing.Color.FromArgb(101, 102, 103, 104),
                MyDecimalValue = 123.4M,
                MyDoubleValue  = 456.7,
                MyFloatValue   = 789.3f,
                MyEnum         = MyData.eIntEnum.Zero,
            };

            Console.WriteLine($"New data to insert: Id={d.MyId} MyUID={d.MyUID}");
            db.Insert(d);

            // get all data
            var allData = db.GetAll <MyData>();

            Console.WriteLine("All data:");
            foreach (var rowData in allData)
            {
                Console.WriteLine($" > {rowData.MyId} {rowData.MyName} {rowData.MyUID}");
            }

            //get "bob" data
            var bobs = db.Query <MyData>("SELECT * FROM MyData WHERE MyName LIKE @name ", new { name = "%bob%" });

            Console.WriteLine("All bob data:");
            foreach (var rowData in bobs)
            {
                Console.WriteLine($" > {rowData.MyId} {rowData.MyName} {rowData.MyUID}");
            }

            // change frst bob
            var firstBob = bobs.First();

            firstBob.MyName = "Changed bob";
            db.InsertOrReplace(firstBob);
            // show all data again
            Console.WriteLine("All data:");
            foreach (var rowData in allData)
            {
                Console.WriteLine($" > {rowData.MyId} {rowData.MyName} {rowData.MyUID}");
            }
        }
        private static void Spider_FetchCompleted(object Sender, FetchCompleteEventArgs args)
        {
            var spider = (SimpleSpider)Sender;
            var hObj   = args.GetHObject();

            if (args.Link.EndsWith("/quem-sao"))
            {
                var lista = hObj["select > #parametro-nome > option"].GetAttributeValues("value");
                spider.AddPages(lista.Where(i => i.Length > 0)
                                .Select(c => new Uri($"https://www.camara.leg.br/deputados/{c}")),
                                args.Link);
                for (int ano = 2021; ano >= 2020; ano--)
                {
                    spider.AddPages(lista.Where(i => i.Length > 0)
                                    .Select(c => new Uri($"https://www.camara.leg.br/deputados/{c}/pessoal-gabinete?ano={ano}")),
                                    args.Link);
                }
            }
            else if (args.Link.Contains("/pessoal-gabinete?"))
            {
                string nomeDeputado = hObj["h1"].Trim();
                int    ano          = args.Link.Uri.ToString().Split('=')[1].ToInt();
                int    deputado     = args.Link.Uri.ToString().Split('/')[4].ToInt();
                var    rows         = hObj["tr"];
                var    pessoas      = new List <PessoalModel>();
                foreach (var row in rows)
                {
                    var cols = row["td"].TrimAll();
                    if (cols.Length == 0)
                    {
                        continue;
                    }

                    DateTime inicio = new DateTime(1900, 01, 01);
                    DateTime fim    = new DateTime(1900, 01, 01);

                    var datas = cols[3].Split(' ');
                    if (cols[3].Contains("Desde"))
                    {
                        inicio = datas[1].ToDateTime();
                        fim    = DateTime.Now;
                    }
                    else if (cols[3].Contains("De "))
                    {
                        inicio = datas[1].ToDateTime();
                        fim    = datas[3].ToDateTime();
                    }

                    var pessoa = new PessoalModel()
                    {
                        Ano             = ano,
                        IdDeputado      = deputado,
                        NomeDeputado    = nomeDeputado,
                        NomeFuncionario = cols[0],
                        GrupoFuncional  = cols[1],
                        Cargo           = cols[2],
                        InicioExercicio = inicio,
                        FimExercicio    = fim,
                        UrlRemuneracao  = "",
                    };
                    pessoas.Add(pessoa);
                }
                db.BulkInsert(pessoas, addReplace: true);
            }
            else
            {
                //Página do deputado
                int      id  = args.Link.Uri.ToString().Split('/')[4].ToInt();
                Deputado dep = new Deputado()
                {
                    Id               = id,
                    Nome             = hObj["h2 > #nomedeputado"].Trim(),
                    PartidoLideranca = hObj["span > .foto-deputado__partido-estado"].Trim(),
                };
                foreach (var li in hObj["ul > .informacoes-deputado > li"])
                {
                    var hdr = li["span"].Trim();

                    switch (hdr)
                    {
                    case "Nome Civil:":
                        dep.NomeCivil = li.Children("#text").Trim();
                        break;

                    case "Telefone:":
                        dep.Telefone = li.Children("#text").Trim();
                        break;

                    case "E-mail:":
                        dep.EMail = li["a"].Trim();
                        break;

                    case "Endereço:":
                        dep.Endereco = li.Children("#text").Trim();
                        break;

                    case "Data de Nascimento:":
                        dep.DataNascimento = li.Children("#text").Trim().ToDateTime();
                        break;

                    case "Naturalidade:":
                        dep.Naturalidade    = li.Children("#text").Trim();
                        dep.Naturalidade_UF = dep.Naturalidade.Split('-')[1].Trim();
                        break;

                    default:
                        break;
                    }
                }

                db.InsertOrReplace(dep);
            }
        }