AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库
This report presents the forensic synthetic code analysis of akfamily/akshare, a Python project with 22,283 GitHub stars. SynthScan v2.0 examined 188,739 lines of code across 483 source files, recording 1866 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 9.0 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1866 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/__init__.py | 3305 | CODE | |
| LOW | akshare/__init__.py | 3311 | CODE | |
| LOW | akshare/__init__.py | 3311 | CODE | |
| LOW | akshare/__init__.py | 3311 | CODE | |
| LOW | akshare/__init__.py | 3320 | CODE | |
| LOW | akshare/__init__.py | 3325 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3330 | CODE | |
| LOW | akshare/__init__.py | 3342 | CODE | |
| LOW | akshare/__init__.py | 3342 | CODE | |
| LOW | akshare/__init__.py | 3347 | CODE | |
| LOW | akshare/__init__.py | 3352 | CODE | |
| LOW | akshare/__init__.py | 3357 | CODE | |
| LOW | akshare/__init__.py | 3362 | CODE | |
| LOW | akshare/__init__.py | 3367 | CODE | |
| LOW | akshare/__init__.py | 3372 | CODE | |
| LOW | akshare/__init__.py | 3372 | CODE | |
| LOW | akshare/__init__.py | 3377 | CODE | |
| LOW | akshare/__init__.py | 3377 | CODE | |
| LOW | akshare/__init__.py | 3382 | CODE | |
| LOW | akshare/__init__.py | 3382 | CODE | |
| LOW | akshare/__init__.py | 3387 | CODE | |
| LOW | akshare/__init__.py | 3387 | CODE | |
| LOW | akshare/__init__.py | 3387 | CODE | |
| LOW | akshare/__init__.py | 3396 | CODE | |
| LOW | akshare/__init__.py | 3396 | CODE | |
| LOW | akshare/__init__.py | 3396 | CODE | |
| LOW | akshare/__init__.py | 3396 | CODE | |
| LOW | akshare/__init__.py | 3405 | CODE | |
| LOW | akshare/__init__.py | 3405 | CODE | |
| LOW | akshare/__init__.py | 3405 | CODE | |
| LOW | akshare/__init__.py | 3410 | CODE | |
| LOW | akshare/__init__.py | 3415 | CODE | |
| LOW | akshare/__init__.py | 3415 | CODE | |
| LOW | akshare/__init__.py | 3415 | CODE | |
| LOW | akshare/__init__.py | 3424 | CODE | |
| LOW | akshare/__init__.py | 3424 | CODE | |
| LOW | akshare/__init__.py | 3429 | CODE | |
| LOW | akshare/__init__.py | 3429 | CODE | |
| LOW | akshare/__init__.py | 3434 | CODE | |
| LOW | akshare/__init__.py | 3434 | CODE | |
| LOW | akshare/__init__.py | 3439 | CODE | |
| LOW | akshare/__init__.py | 3439 | CODE | |
| LOW | akshare/__init__.py | 3444 | CODE | |
| LOW | akshare/__init__.py | 3444 | CODE | |
| LOW | akshare/__init__.py | 3452 | CODE | |
| LOW | akshare/__init__.py | 3452 | CODE | |
| LOW | akshare/__init__.py | 3457 | CODE | |
| LOW | akshare/__init__.py | 3462 | CODE | |
| LOW | akshare/__init__.py | 3467 | CODE | |
| LOW | akshare/__init__.py | 3472 | CODE | |
| LOW | akshare/__init__.py | 3477 | CODE | |
| LOW | akshare/__init__.py | 3477 | CODE | |
| LOW | akshare/__init__.py | 3477 | CODE | |
| LOW | akshare/__init__.py | 3482 | CODE | |
| LOW | akshare/__init__.py | 3482 | CODE | |
| 1048 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_registry.py | 18 | def test_tokenize_splits_on_whitespace_and_punctuation(): | CODE |
| LOW⚡ | tests/test_registry.py | 23 | def test_tokenize_drops_empty(): | CODE |
| LOW⚡ | tests/test_registry.py | 27 | def test_score_exact_name_match_dominates(): | CODE |
| LOW⚡ | tests/test_registry.py | 31 | def test_score_desc_hit_lower_than_name_hit(): | CODE |
| LOW⚡ | tests/test_registry.py | 37 | def test_score_matches_output_column(): | CODE |
| LOW⚡ | tests/test_registry.py | 41 | def test_score_all_tokens_hit_gets_bonus(): | CODE |
| LOW⚡ | tests/test_registry.py | 47 | def test_score_undocumented_is_downweighted(): | CODE |
| LOW⚡ | tests/test_registry.py | 51 | def test_score_no_hit_returns_zero(): | CODE |
| LOW⚡ | tests/test_registry.py | 187 | def test_search_returns_dataframe_with_expected_columns(): | CODE |
| LOW⚡ | tests/test_registry.py | 194 | def test_search_empty_result_keeps_columns(): | CODE |
| LOW⚡ | tests/test_registry.py | 200 | def test_search_respects_limit(): | CODE |
| LOW⚡ | tests/test_registry.py | 204 | def test_search_filters_by_category(): | CODE |
| LOW⚡ | tests/test_registry.py | 209 | def test_search_documented_only_excludes_undocumented(): | CODE |
| LOW⚡ | tests/test_registry.py | 215 | def test_interface_info_returns_full_record(): | CODE |
| LOW⚡ | tests/test_registry.py | 221 | def test_interface_info_unknown_name_suggests_candidates(): | CODE |
| LOW⚡ | tests/test_registry.py | 227 | def test_interface_info_deepcopy_isolates_nested_structures(monkeypatch): | CODE |
| LOW⚡ | tests/test_registry.py | 265 | def test_list_categories_counts(): | CODE |
| LOW⚡ | tests/test_registry.py | 271 | def test_bigrams_single_char_returns_empty(): | CODE |
| LOW⚡ | tests/test_registry.py | 275 | def test_bigrams_compresses_whitespace_before_splitting(): | CODE |
| LOW⚡ | tests/test_registry.py | 279 | def test_search_exact_name_is_ranked_first(): | CODE |
| LOW⚡ | tests/test_registry.py | 315 | def test_search_exact_name_survives_trailing_punctuation(suffix, monkeypatch): | CODE |
| LOW⚡ | tests/test_registry.py | 321 | def test_search_unspaced_query_recalls_via_bigram_fallback(): | CODE |
| LOW⚡ | tests/test_registry.py | 330 | def test_search_negative_limit_raises(): | CODE |
| LOW⚡ | tests/test_registry.py | 335 | def test_search_empty_query_returns_empty_with_columns(): | CODE |
| LOW | tests/test_registry.py | 67 | def test_score_normalizes_whitespace_between_latin_and_cjk(): | CODE |
| LOW | tests/test_registry.py | 87 | def test_score_does_not_match_across_adjacent_column_boundary(): | CODE |
| LOW | tests/test_registry.py | 102 | def test_score_category_only_hit_is_positive(): | CODE |
| LOW | tests/test_registry.py | 106 | def test_score_desc_gt_category_gt_output_when_each_hits_alone(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 12 | def test_public_api_is_exported(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 20 | def test_real_search_returns_callable_interfaces(): | CODE |
| LOW⚡ | tests/test_registry_integration.py | 30 | def test_every_registry_entry_is_reachable(): | CODE |
| LOW | tests/test_check_release.py | 39 | def test_parse_tag_extracts_version(): | CODE |
| LOW | tests/test_check_release.py | 47 | def test_parse_tag_rejects_malformed(tag): | CODE |
| LOW⚡ | tests/test_check_release.py | 59 | def test_read_version_without_declaration_raises(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 66 | def test_has_version_entry_requires_line_start(): | CODE |
| LOW⚡ | tests/test_check_release.py | 74 | def test_collect_problems_passes_when_all_aligned(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 79 | def test_collect_problems_detects_tag_version_mismatch(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 86 | def test_collect_problems_detects_missing_changelog_entry(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 92 | def test_collect_problems_detects_missing_init_history(tmp_path): | CODE |
| LOW⚡ | tests/test_check_release.py | 98 | def test_collect_problems_reports_every_problem_at_once(tmp_path): | CODE |
| LOW⚡ | tests/test_build_registry.py | 85 | def test_parse_table_missing_header_returns_empty(): | CODE |
| LOW⚡ | tests/test_build_registry.py | 89 | def test_parse_table_pads_missing_desc_when_row_has_two_cells(): | CODE |
| LOW⚡ | tests/test_build_registry.py | 95 | def test_parse_table_truncates_extra_column_when_row_has_four_cells(): | CODE |
| LOW | tests/test_build_registry.py | 169 | def test_collect_doc_records_category_from_parent_dir_name(tmp_path): | CODE |
| LOW | tests/test_build_registry.py | 179 | def test_collect_doc_records_supports_fullwidth_colon(tmp_path): | CODE |
| LOW⚡ | tests/test_build_registry.py | 65 | def test_parse_table_reads_rows(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 73 | def test_parse_table_picks_correct_header(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 78 | def test_parse_table_stops_at_blank_line_not_next_table(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 314 | def test_serialize_has_no_timestamp_or_version(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 320 | def test_serialize_ends_with_single_newline(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 329 | def test_baseline_allows_known_gaps(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 335 | def test_baseline_rejects_new_undocumented(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 343 | def test_baseline_rejects_new_orphan(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 351 | def test_baseline_rejects_stale_entry(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 360 | def test_baseline_rejects_fixed_orphan(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 369 | def test_collect_all_names_includes_non_data_public_api(tmp_path): | STRING |
| LOW⚡ | tests/test_build_registry.py | 382 | def test_collect_all_names_excludes_dunder_and_third_party(tmp_path): | STRING |
| LOW⚡ | tests/test_build_registry.py | 391 | def test_collect_all_names_is_sorted_and_unique(tmp_path): | STRING |
| LOW⚡ | tests/test_build_registry.py | 399 | def test_render_all_block_is_valid_python_and_round_trips(): | STRING |
| LOW⚡ | tests/test_build_registry.py | 409 | def test_replace_all_block_appends_when_marker_absent(): | STRING |
| 425 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | akshare/utils/demjson.py | 239 | # ECMAScript has an undefined value (similar to yet distinct from null). | COMMENT |
| HIGH⚡ | akshare/utils/demjson.py | 240 | # Neither Python or strict JSON have support undefined, but to allow | COMMENT |
| HIGH | akshare/utils/demjson.py | 260 | syntax_error = _undefined_class() # same as undefined, but has separate identity | CODE |
| HIGH | akshare/utils/demjson.py | 3164 | "Arrays may have omitted/elided elements, e.g., [1,,3] == [1,undefined,3]", | CODE |
| HIGH | akshare/utils/demjson.py | 5201 | obj.append(undefined) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 101 | c.push(c0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 102 | if (c.length == 3 || i == s.length - 1) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 106 | c.push(0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 108 | a.push((c[0] >> 2) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 109 | a.push(((c[1] >> 4) | (c[0] << 6)) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 110 | a.push(((c[1] << 4) | (c[2] >> 2)) & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 111 | a.push(c[2] & 63); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 117 | a.push(0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 437 | t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 445 | u = "v" == m && r.rv ? y() : 1, | CODE |
| HIGH⚡ | akshare/stock/cons.py | 449 | if (!(l[h[m]] = a) && (s > 1 || 241 > t) && (r.zv ? !y() : 1)) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 459 | c.push(l) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 665 | t.push(i) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 670 | if (t = (t || 0).toString(), | CODE |
| HIGH⚡ | akshare/stock/cons.py | 675 | n.push(Math.floor(e * Math.pow(10, -e) + .5) - 0); | CODE |
| HIGH⚡ | akshare/stock/cons.py | 883 | t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 891 | c = "v" == p && o.rv ? _() : 1, | CODE |
| HIGH⚡ | akshare/stock/cons.py | 895 | if (!(l[d[p]] = r) && (s > 1 || 241 > t) && (o.zv ? !_() : 1)) { | CODE |
| HIGH⚡ | akshare/stock/cons.py | 905 | u.push(l) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1114 | t.push(n) | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1121 | if (t = (t || 0).toString(), | CODE |
| HIGH⚡ | akshare/stock/cons.py | 1126 | i.push(Math.floor(e * Math.pow(10, -e) + .5) - 0); | CODE |
| HIGH | akshare/stock/cons.py | 249 | for (c.push("+", "/"), | CODE |
| HIGH | akshare/stock/cons.py | 331 | (3 == n || 4 == n) && (r.d += 5 - n); | CODE |
| HIGH | akshare/stock/cons.py | 337 | for (n = r.wd || 62, | CODE |
| HIGH | akshare/stock/cons.py | 351 | e && n[e - 1]++, | CODE |
| HIGH | akshare/stock/cons.py | 405 | i.push(l), | CODE |
| HIGH | akshare/stock/cons.py | 406 | !(e >= n) && (e != n - 1 || 63 & (r.c ^ t + 1)); t++) | CODE |
| HIGH | akshare/stock/cons.py | 519 | l & 1 << 4 - e && i.l_l[e]++, | CODE |
| HIGH | akshare/stock/cons.py | 533 | t.push(n) | CODE |
| HIGH | akshare/stock/cons.py | 548 | n--)) : t.push(e), | CODE |
| HIGH | akshare/stock/cons.py | 563 | for (t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) { | CODE |
| HIGH | akshare/stock/cons.py | 569 | a.push(o) | CODE |
| HIGH | akshare/stock/cons.py | 628 | !r.b_avp && a.a && (r.u_a = P(i && i.amount || 0, 0, r.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 628 | !r.b_avp && a.a && (r.u_a = P(i && i.amount || 0, 0, r.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 641 | y() ? y() ? y() ? a.d = x() : r.l_v += N() : r.b_ph && y() ? r["l_" + "et".charAt(r.b_phx && | CODE |
| HIGH | akshare/stock/cons.py | 695 | for (u.push("+", "/"), | CODE |
| HIGH | akshare/stock/cons.py | 777 | (3 == i || 4 == i) && (o.d += 5 - i); | CODE |
| HIGH | akshare/stock/cons.py | 783 | for (i = o.wd || 62, | CODE |
| HIGH | akshare/stock/cons.py | 797 | e && i[e - 1]++, | CODE |
| HIGH | akshare/stock/cons.py | 851 | n.push(l), | CODE |
| HIGH | akshare/stock/cons.py | 852 | !(e >= i) && (e != i - 1 || 63 & (o.c ^ t + 1)); t++) | CODE |
| HIGH | akshare/stock/cons.py | 965 | l & 1 << 4 - e && n.l_l[e]++, | CODE |
| HIGH | akshare/stock/cons.py | 979 | t.push(i) | CODE |
| HIGH | akshare/stock/cons.py | 994 | i--)) : t.push(e), | CODE |
| HIGH | akshare/stock/cons.py | 1010 | for (t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) { | CODE |
| HIGH | akshare/stock/cons.py | 1016 | r.push(a) | CODE |
| HIGH | akshare/stock/cons.py | 1077 | !o.b_avp && r.a && (o.u_a = C(n && n.amount || 0, 0, o.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 1077 | !o.b_avp && r.a && (o.u_a = C(n && n.amount || 0, 0, o.p_a)) | CODE |
| HIGH | akshare/stock/cons.py | 1090 | _() ? _() ? _() ? r.d = x() : o.l_v += y() : o.b_ph && _() ? o["l_" + "et".charAt(o.b_phx && | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 62 | yrange.push((minprice + accuracy * i).toFixed(2) / 1); | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 77 | turnoverRate = Math.min(1, eles.hsl / 100 || 0); | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 185 | if (percent > 1 || percent < 0) throw 'argument "percent" out of range'; | CODE |
| HIGH | akshare/stock_feature/stock_cyq_em.py | 214 | array.push(0); | CODE |
| HIGH | akshare/stock_feature/stock_a_pe_and_pb.py | 20 | if (n && n.length) { | CODE |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | akshare/movie/movie_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/video_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/artist_yien.py | 0 | get js file path :param name: file name :type name: str :param module_file: filename :type module_file: str :return: 路径 | STRING |
| HIGH | akshare/movie/movie_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/movie/video_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/movie/artist_yien.py | 0 | read the file content :param file_name: filename :type file_name: str :return: file content :rtype: str | STRING |
| HIGH | akshare/bond/bond_issue_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_industry_pe_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_hold_num_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_dividend_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_rank_forecast.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_cg_guarantee.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_hold_control_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_ipo_summary_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_allotment_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_profile_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_industry_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_cg_equity_mortgage.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_share_changes_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock/stock_new_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_board_industry_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_technology_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_board_concept_ths.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/stock_feature/stock_fund_flow.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/fund/fund_report_cninfo.py | 0 | 获取 js 文件的内容 :param file: js 文件名 :type file: str :return: 文件内容 :rtype: str | STRING |
| HIGH | akshare/economic/macro_china_hk.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_japan.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_swiss.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| HIGH | akshare/economic/macro_germany.py | 0 | 东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码 https://data.eastmoney.com/cjsj/foreign_1_0.html :param symbol: 代码 :type symbol: str :retu | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_punctuation.py | 326 | CODE | |
| LOW | scripts/check_punctuation.py | 419 | CODE | |
| LOW | akshare/request.py | 10 | CODE | |
| LOW | akshare/request.py | 65 | CODE | |
| LOW | akshare/stock_fundamental/stock_profit_forecast_ths.py | 17 | CODE | |
| LOW | akshare/stock_fundamental/stock_notice.py | 17 | CODE | |
| LOW | …re/stock_fundamental/stock_profit_forecast_hk_etnet.py | 15 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 194 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 291 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 380 | CODE | |
| LOW | akshare/stock_fundamental/stock_finance_ths.py | 477 | CODE | |
| LOW | akshare/futures/futures_comm_qihuo.py | 172 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 24 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 341 | CODE | |
| LOW | akshare/futures/futures_daily_bar.py | 637 | CODE | |
| LOW | akshare/futures/futures_warehouse_receipt.py | 104 | CODE | |
| LOW | akshare/futures/futures_basis.py | 79 | CODE | |
| LOW | akshare/futures/futures_basis.py | 146 | CODE | |
| LOW | akshare/futures/futures_roll_yield.py | 74 | CODE | |
| LOW | akshare/futures/requests_fun.py | 16 | CODE | |
| LOW | akshare/futures/requests_fun.py | 53 | CODE | |
| LOW | akshare/futures/cot.py | 110 | CODE | |
| LOW | akshare/futures/cot.py | 566 | CODE | |
| LOW | akshare/futures/cot.py | 818 | CODE | |
| LOW | akshare/futures/cot.py | 1052 | CODE | |
| LOW | akshare/futures/receipt.py | 82 | CODE | |
| LOW | akshare/futures/receipt.py | 386 | CODE | |
| LOW | akshare/futures/receipt.py | 571 | CODE | |
| LOW | akshare/futures/futures_settle.py | 59 | CODE | |
| LOW | akshare/futures/futures_settle.py | 481 | CODE | |
| LOW | akshare/futures/cons.py | 522 | CODE | |
| LOW | akshare/bank/bank_cbirc_2020.py | 111 | CODE | |
| LOW | akshare/bond/bond_zh_cov.py | 542 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 300 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 385 | CODE | |
| LOW | akshare/economic/macro_china_nbs.py | 566 | CODE | |
| LOW | akshare/economic/macro_china.py | 318 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 13 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 163 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 276 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 412 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 528 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 685 | CODE | |
| LOW | akshare/other/other_car_cpca.py | 722 | CODE | |
| LOW | akshare/utils/demjson.py | 79 | CODE | |
| LOW | akshare/utils/demjson.py | 275 | CODE | |
| LOW | akshare/utils/demjson.py | 3068 | CODE | |
| LOW | akshare/utils/demjson.py | 6182 | CODE | |
| LOW | akshare/utils/demjson.py | 718 | CODE | |
| LOW | akshare/utils/demjson.py | 853 | CODE | |
| LOW | akshare/utils/demjson.py | 943 | CODE | |
| LOW | akshare/utils/demjson.py | 1270 | CODE | |
| LOW | akshare/utils/demjson.py | 1516 | CODE | |
| LOW | akshare/utils/demjson.py | 2234 | CODE | |
| LOW | akshare/utils/demjson.py | 2715 | CODE | |
| LOW | akshare/utils/demjson.py | 2835 | CODE | |
| LOW | akshare/utils/demjson.py | 3265 | CODE | |
| LOW | akshare/utils/demjson.py | 3456 | CODE | |
| LOW | akshare/utils/demjson.py | 3521 | CODE | |
| LOW | akshare/utils/demjson.py | 3647 | CODE | |
| 42 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | akshare/other/other_taptap.py | 15 | # ============================================================ | COMMENT |
| MEDIUM | akshare/other/other_taptap.py | 17 | # ============================================================ | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 236 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 784 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 786 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 1042 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | akshare/utils/demjson.py | 1044 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 43 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 62 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 264 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 681 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 738 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1590 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1592 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1753 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 1755 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2182 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2184 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2400 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2402 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2453 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2455 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2602 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2604 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2869 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 2871 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 3706 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 3708 | # ---------------------------------------------------------------------- | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 6106 | # ------------------------------ | COMMENT |
| MEDIUM | akshare/utils/demjson.py | 6408 | # ====================================================================== | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/registry.md | 154 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_ipo_review.py | 66 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 603 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 673 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_finance_sina.py | 745 | except Exception as e: | CODE |
| LOW | akshare/stock_fundamental/stock_ipo_tutor.py | 68 | except Exception as e: | CODE |
| LOW | akshare/futures/futures_basis.py | 132 | except Exception as e: # noqa: E722 | CODE |
| MEDIUM | akshare/economic/macro_bank.py | 77 | print(f"Error fetching data: {e}") | CODE |
| MEDIUM | akshare/utils/demjson.py | 1797 | def restore_position(self): | CODE |
| LOW | akshare/utils/demjson.py | 1838 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 2657 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 3954 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 5784 | except Exception: | CODE |
| LOW | akshare/utils/demjson.py | 6599 | except Exception as err: | CODE |
| LOW | akshare/utils/demjson.py | 6378 | except Exception: | STRING |
| LOW | akshare/utils/demjson.py | 6396 | except Exception: | STRING |
| LOW | akshare/news/news_baidu.py | 124 | except Exception as e: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 174 | except Exception: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 178 | except Exception as e: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 183 | except Exception: | CODE |
| LOW⚡ | akshare/stock/stock_us_sina.py | 187 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 156 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 160 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 197 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 201 | except Exception as e: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 228 | except Exception: | CODE |
| LOW | akshare/stock/stock_zh_kcb_sina.py | 232 | except Exception as e: | CODE |
| LOW | akshare/fund/fund_fee_em.py | 55 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 61 | COMMENT | |
| LOW | pyproject.toml | 181 | COMMENT | |
| LOW | docs/requirements.txt | 1 | # 文档构建依赖的唯一声明处,由 .readthedocs.yaml 的 python.install 直接引用。 | COMMENT |
| LOW | docs/conf.py | 61 | # Markdown 表格,而 myst_parser 原生渲染 GFM 表格(本文档有 16000+ 行表格)。 | COMMENT |
| LOW | docs/conf.py | 81 | # The theme to use for HTML and HTML Help pages. See the documentation for | COMMENT |
| LOW | scripts/build_registry.py | 101 | record = parse_segment(text[match.end() : end]) | COMMENT |
| LOW | .github/dependabot.yml | 1 | # Dependabot 配置 | COMMENT |
| LOW | akshare/cal/rv.py | 121 | # yang_zhang_rv formula is give as: | COMMENT |
| LOW | akshare/fund/fund_etf_em.py | 341 | :rtype: pandas.DataFrame | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/movie/movie_yien.py | 77 | CODE | |
| LOW | akshare/movie/video_yien.py | 62 | CODE | |
| LOW | akshare/movie/artist_yien.py | 62 | CODE | |
| LOW | akshare/futures/cot.py | 405 | CODE | |
| LOW | akshare/bond/bond_info_cm.py | 65 | CODE | |
| LOW | akshare/utils/demjson.py | 6179 | CODE | |
| LOW | akshare/utils/demjson.py | 6565 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | akshare/__init__.py | 5993 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | akshare/utils/demjson.py | 6062 | """This method is used to encode user-defined class objects. | STRING |
| MEDIUM | akshare/utils/demjson.py | 6287 | # Initialize the JSON object | STRING |