如何使用 Java (Android) 从雅虎财经现金流量表中提取值?

2024-03-26

这是该问题解决方案的后续内容:如何从网页(内的选项卡)的 HTML 页面源中提取数据? https://stackoverflow.com/questions/52939611/how-to-extract-data-from-html-page-source-of-a-tab-within-a-webpage/53009874

我正在尝试对 Finance.yahoo.com/quote/AAPL/cash-flow?p=AAPL 上的 Cash Flow Stmt 做同样的事情 - 使用

.getJSONObject("dispatcher") 
.getJSONObject("stores") 
.getJSONObject("QuoteSummaryStore") 
.getJSONObject("cashflowStatementHistory") 
.getJSONArray("cashflowStatements");

尝试提取密钥的值trailingFreeCashFlow- 但是,它失败并出现错误“追踪自由现金流没有价值”。

 public static Map<String, Map<String, String>> getCashFlowTableNames() {
        final Map<String, String> cashFlow = new LinkedHashMap<String, String>() {
            {
                put("trailingFreeCashFlow", "trailingFreeCashFlow");
            }
        };

        Map<String, Map<String, String>> allTableNames = new LinkedHashMap<String, Map<String, String>>() {
            {
                put("cashFlow", cashFlow);
            }
        };
        return allTableNames;
    }

and

public static String getCashFlowYear(String requestURL) throws IOException {
    String userAgent1 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 OPR/56.0.3051.43";
    try {
        Document doc1 = Jsoup.connect(requestURL).userAgent(userAgent1).get();
        Elements scriptTags = doc1.getElementsByTag("script");
        String re = "root\\.App\\.main\\s*\\=\\s*(.*?);\\s*\\}\\(this\\)\\)\\s*;";

        for (Element script : scriptTags) {
            Pattern pattern = Pattern.compile(re, Pattern.DOTALL);
            Matcher matcher = pattern.matcher(script.html());

            if (matcher.find()) {
                String data = matcher.group(1);
                //Log.e("CashFlowData", data);

                JSONObject jo = new JSONObject(data);
                JSONArray table = getCashFlowTable(jo);
                JSONArray tableQ = getCashFlowTableQ(jo);
                Map<String, Map<String, String>> tableNames = getCashFlowTableNames();

                String[] dates = getDates(table);
                String[] datesQ = getDates(tableQ); //works
                List<String> tableData = new ArrayList<>();

                for (Map.Entry<String, Map<String, String>> tableEntry : tableNames.entrySet()) {
                    tableData.add(tableEntry.getKey());
                    tableData.addAll(Arrays.asList(dates));

                    for (Map.Entry<String, String> row1 : tableEntry.getValue().entrySet()) {
                        String[] tableRow1 = getRow(table, row1.getValue());
                        tableData.add(row1.getKey());
                        for (String column : tableRow1) {
                            tableData.add(column);
                        }
                    }
                }
                cashFlowData = TextUtils.join(" ", tableData);
                cashFlowData = cashFlowData.replaceAll("[^a-zA-Z0-9 /-]", "");
                cashFlowData = cashFlowData.trim().replaceAll("(?<=[A-Za-z])\\s+(?=[A-Za-z])", "");
                Log.e("cashFlowData", cashFlowData);

                List<String> tableDataQ = new ArrayList<>();

                for (Map.Entry<String, Map<String, String>> tableEntry : tableNames.entrySet()) {
                    tableDataQ.add(tableEntry.getKey());
                    tableDataQ.addAll(Arrays.asList(datesQ));

                    for (Map.Entry<String, String> row1 : tableEntry.getValue().entrySet()) {
                        String[] tableRow1 = getRow(tableQ, row1.getValue());
                        tableDataQ.add(row1.getKey());
                        for (String column : tableRow1) {
                            tableDataQ.add(column);
                        }
                    }
                }
                cashFlowDataQ = TextUtils.join(" ", tableDataQ);
                cashFlowDataQ = cashFlowDataQ.replaceAll("[^a-zA-Z0-9 /-]", "");
                cashFlowDataQ = cashFlowDataQ.trim().replaceAll("(?<=[A-Za-z])\\s+(?=[A-Za-z])", "");
                //Log.e("balanceDATAQ", balanceDataQ);
            }
        }
    } catch (Exception e) {
        Log.e("err", "err", e);
    }
    return cashFlowData;
}

有什么建议么?

Thanks!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Java (Android) 从雅虎财经现金流量表中提取值? 的相关文章

  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • Android 视图可见性消失

    如果我设置了一个视图可见性 它被夸大了 消失了 它会加快我的 UI 速度吗 它将加快 UI 的实际绘制速度 因为 好吧 您不必再绘制它 但它仍然会膨胀 并且膨胀过程不会更快
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • 在 Android 中将图像从可绘制图像转换为字节数组

    由于我要将图像发送到 Parse com 因此我必须将其转换为字节数组 我的第一种方法是从图库中选择图像并将其转换为字节数组 如下所示 Override protected void onActivityResult int request
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • Ctrl 单击 Eclipse 中的类显示二进制/jar 而不是源

    使用Eclipse 版本 Helios 服务版本 2 内部版本号 20110218 0911 与Android插件 我有一个 Android 项目 AndroidUtil 它被标记为我的主要 Android 应用程序的 库 项目 当我按住
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • Android - 有没有办法监听 GPS 是否启用或禁用

    我编写此代码是为了接收位置更新 PendingIntent launchIntent PendingIntent getBroadcast context 5000 intent 0 manager requestLocationUpdat
  • Spring 4 MVC 和 Websockets - 没有合适的默认 RequestUpgradeStrategy

    我需要 Websockets 在我的应用程序中进行实时更新 所以我找到了这个例子并一步一步地做到了here http raymondhlee wordpress com 2014 01 19 using spring 4 websocket
  • popBackStack导致反复调用fragment的oncreateView

    我有 3 个片段 A B C 我编写了一段代码来替换它们并维护 backstack public void addFragment Fragment fragmentToAdd String fragmentTag FragmentMana
  • 从 Spring 启动运行 Java 类

    我使用的是Java8和Spring4 3 1 我有一个 Java Spring 应用程序托管由浏览器和移动应用程序客户端访问的 RESTfult 服务 其次 我编写了一个侦听事件的聊天服务器 socket io 来自客户 该聊天服务器正在从
  • RecyclerView 来自 Firebase 的部分和数据

    您好 我正在开发一个应用程序 在其中我必须使用 Firebase 填充数据回收器视图 准备就绪 现在我想做的是用 data firebase 填写一个 recyclerview 但有一些部分将成为托管 data firebase 的父级 我
  • 找不到满足版本限制的“com.google.code.findbugs:jsr305”版本

    当生成签名的 APK 进行发布时 我收到此错误消息 Cannot find a version of com google code findbugs jsr305 that satisfies the version constraint
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • Android Studio MediaStore,低于 SDK 29 将图像保存在 SD 卡中失败

    我需要将图像保存在Android 10以下的sd card的图片目录中 我已经实现了范围存储 此代码适用于sdk 29及以上版本 因为MediaStore getExternalVolumeNames是在sdk 29中添加的 sdk 29以
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab
  • 在 IntelliJ IDEA 11 中编译期间未检测到模块依赖性

    我正在开发一个 Android 应用程序 我正在尝试包含图形视图 https github com jjoe64 GraphView绘制一些图表 需要将其作为模块依赖项包含在内 执行此操作后 IntelliJ IDE 会正确检测到包 我可以
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • iOS:如何实现像Android的startActivityForResult这样的行为

    我是一名 Android 开发人员 正在开发我们应用程序的 iOS 版本 我需要知道如何在 Android 上实现类似于 startActivityForResult 的行为 我需要显示一个新的视图控制器 然后在新的视图控制器关闭时将控制权
  • 扩展Android应用程序类

    当我正在寻找从远程设备获取错误报告的解决方案时 就像 iOS 中的试飞应用程序一样 我发现了acra适用于 Android 设备here http code google com p acra wiki BasicSetup 在基本设置中

随机推荐