示例#1
0
文件: Dkb.cs 项目: sidiandi/sammy
        public IList <Sidi.Sammy.Payment> GetPayments()
        {
            var session = new DkbSession(User, Password);

            session.Login();
            try
            {
                var t        = (IHTMLElement)session.GetSearchResultTable();
                var accounts = t.ParseTable();
                accounts = accounts.Take(accounts.Length - 1).ToArray();
                if (log.IsDebugEnabled)
                {
                    log.Debug(accounts.Dump());
                }

                var payments = new List <Sidi.Sammy.Payment>();

                int accountIndex = 0;
                foreach (var a in accounts)
                {
                    var url = String.Format("https://banking.dkb.de/dkb/-?$part=DkbTransactionBanking.content.banking.FinancialStatus.FinancialStatus&$event=paymentTransaction&table=cashTable&row={0}", accountIndex);
                    session.Navigate(url);
                    var transactions = session.GetSearchResultTable();

                    var transactionUrls = transactions.GetAllChildren()
                                          .Where(img => img.tagName.Equals("IMG", StringComparison.InvariantCultureIgnoreCase) && img.GetAttribute("alt").Equals("Details"))
                                          .Select(img => img.parentElement.GetAttribute("href"))
                                          .ToList();

                    log.Debug(transactionUrls.Join());

                    foreach (var transactionUrl in transactionUrls)
                    {
                        session.Navigate(transactionUrl);

                        var detailsTable = session.GetWhiteTable().ParseTable();
                        if (log.IsDebugEnabled)
                        {
                            log.Debug(detailsTable.Dump());
                        }
                        var details = new Dictionary <string, string>();
                        foreach (var i in detailsTable)
                        {
                            details[i[0].Trim()] = i[1].Trim();
                        }
                        if (log.IsDebugEnabled)
                        {
                            foreach (var i in details)
                            {
                                log.InfoFormat("{0}={1}", i.Key.Quote(), i.Value.Quote());
                            }
                        }

                        var p = new Payment();
                        p.OwnAcctNo   = a[0];
                        p.OwnName     = a[1];
                        p.OwnBankCode = "12030000";

                        var dateString = GetValue(details, "Buchungstag:", "Belegdatum:");
                        if (!String.IsNullOrEmpty(dateString))
                        {
                            p.EntryDate = DateTime.Parse(dateString, culture);
                        }

                        p.ValueDate = DateTime.Parse(details["Wertstellung:"], culture);
                        ParseValue(details["Betrag:"], out p.Value, out p.Currency);
                        details.TryGetValue("Auftraggeber/Begünstigter:", out p.Name);

                        if (details.ContainsKey(AcctNoKey))
                        {
                            var parts = Regex.Split(details[AcctNoKey], @"\s*/\s*");
                            p.AcctNo   = parts[0];
                            p.BankCode = parts[1];
                        }

                        p.EntryText = GetValue(details, "Buchungstext:");

                        p.Purpose = GetValue(details, "Verwendungszweck:", "Umsatzbeschreibung:");

                        payments.Add(p);
                    }
                    ++accountIndex;
                }

                return(payments);
            }
            finally
            {
                session.Logout();
            }
        }
示例#2
0
文件: Dkb.cs 项目: al-main/sammy
        public IList<Sidi.Sammy.Payment> GetPayments()
        {
            var session = new DkbSession(User, Password);
            session.Login();
            try
            {
                var t = (IHTMLElement) session.GetSearchResultTable();
                var accounts = t.ParseTable();
                accounts = accounts.Take(accounts.Length - 1).ToArray();
                if (log.IsDebugEnabled) log.Debug(accounts.Dump());

                var payments = new List<Sidi.Sammy.Payment>();

                int accountIndex = 0;
                foreach (var a in accounts)
                {
                    var url = String.Format("https://banking.dkb.de/dkb/-?$part=DkbTransactionBanking.content.banking.FinancialStatus.FinancialStatus&$event=paymentTransaction&table=cashTable&row={0}", accountIndex);
                    session.Navigate(url);
                    var transactions = session.GetSearchResultTable();

                    var transactionUrls = transactions.GetAllChildren()
                        .Where(img => img.tagName.Equals("IMG", StringComparison.InvariantCultureIgnoreCase) && img.GetAttribute("alt").Equals("Details"))
                        .Select(img => img.parentElement.GetAttribute("href"))
                        .ToList();

                    log.Debug(transactionUrls.Join());

                    foreach (var transactionUrl in transactionUrls)
                    {
                        session.Navigate(transactionUrl);

                        var detailsTable = session.GetWhiteTable().ParseTable();
                        if (log.IsDebugEnabled) log.Debug(detailsTable.Dump());
                        var details = new Dictionary<string, string>();
                        foreach (var i in detailsTable)
                        {
                            details[i[0].Trim()] = i[1].Trim();
                        }
                        if (log.IsDebugEnabled)
                        {
                            foreach (var i in details)
                            {
                                log.InfoFormat("{0}={1}", i.Key.Quote(), i.Value.Quote());
                            }
                        }

                        var p = new Payment();
                        p.OwnAcctNo = a[0];
                        p.OwnName = a[1];
                        p.OwnBankCode = "12030000";

                        var dateString = GetValue(details, "Buchungstag:", "Belegdatum:");
                        if (!String.IsNullOrEmpty(dateString))
                        {
                            p.EntryDate = DateTime.Parse(dateString, culture);
                        }

                        p.ValueDate = DateTime.Parse(details["Wertstellung:"], culture);
                        ParseValue(details["Betrag:"], out p.Value, out p.Currency);
                        details.TryGetValue("Auftraggeber/Begünstigter:", out p.Name);

                        if (details.ContainsKey(AcctNoKey))
                        {
                            var parts = Regex.Split(details[AcctNoKey], @"\s*/\s*");
                            p.AcctNo = parts[0];
                            p.BankCode = parts[1];
                        }

                        p.EntryText = GetValue(details, "Buchungstext:");

                        p.Purpose = GetValue(details, "Verwendungszweck:", "Umsatzbeschreibung:");

                        payments.Add(p);
                    }
                    ++accountIndex;
                }

                return payments;
            }
            finally
            {
                session.Logout();
            }
        }