how2j.cn

下载区
文件名 文件大小
请先登录 1m
增值内容 1m
1m
请先登录 3m
增值内容 3m
3m

4分44秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : 项目源码   
步骤 2 : 怎么使用   
步骤 3 : 关于单站源码   

增值内容,请先登录
完整的 SpringCloud 趋势量化投资项目,使用 Springboot 、Vue.js、redis, Zipkin, RabbitMQ, SpringCloud 等一整套技术栈, 从无到有涵盖全部59个知识点,378个开发步骤, 充实 SpringCloud 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
增值内容,请先登录
完整的 SpringCloud 趋势量化投资项目,使用 Springboot 、Vue.js、redis, Zipkin, RabbitMQ, SpringCloud 等一整套技术栈, 从无到有涵盖全部59个知识点,378个开发步骤, 充实 SpringCloud 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
步骤 3 :

关于单站源码

edit
增值内容,请先登录
完整的 SpringCloud 趋势量化投资项目,使用 Springboot 、Vue.js、redis, Zipkin, RabbitMQ, SpringCloud 等一整套技术栈, 从无到有涵盖全部59个知识点,378个开发步骤, 充实 SpringCloud 项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
关于单站源码


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-01-06 时隔四个月,回来捞一下.
luzhi0324




上一年大二暑假(2021年),跟着站长学习把SpringCloud这个撸一遍. 由于现在大三考研.现在代码这块主要学习数据结构和算法(C++). 但这一年(2022年)一月份我在学习STL处理数据时,想到了站长给的股票数据是不能更新, 于是我花了三四天下午时间把数据更新给解决了.使用Python tushare脚本获取Json数据, C++ Jsoncpp库格式化获取的Json数据, Python脚本将获取和格式化的Json数据更新到第三方数据提供项目中.这个代码没有跨平台(Mac 开发).Win改一下路径应该可以.Java代码创建一个新的微服务,这个我使用了定时器.每12个小时执行程序或者脚本.执行使用Runtime.getRuntime().exec(command)去执行.但是要通过线程类Thread中的join()方法确保 获取->格式化->更新这个顺序.剩下就没什么了.
加载中
```python3.9
# -*- coding:utf-8 -*-
"""
# @author  apple
# @version 1.1
# @env     Pycharm Python3
# @desc    股票爬取脚本
"""
import tushare as ts
import time
import json
import sys
import os


# 创建相关的股票编号文件和写入数据
# noinspection DuplicatedCode
def json_transfer_file(key_list: list, value_list: list, share_name: str):
    if not (isinstance( key_list, list ) and isinstance( value_list, list )):
        raise TypeError( "类型出错,都要保证key和value都是数组哦!" )

    if key_list.__len__() != value_list.__len__():
        raise Exception( "key和value的大小长度要相同!" )
    json_file_list = []
    for number_index in range( 0, key_list.__len__() ):
        json_file_list.append(
            operation_func( key_list=key_list, value_list=value_list, number_index=number_index ) )

    file_name = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/" + share_name + ".json"
    if not os.path.exists(file_name):
        os.system( "touch ".__add__( file_name ) )

    # 将生成的json写入文件中.
    with open( file_name, 'w+' ) as operation_file:
        operation_file.write( str( json_file_list ) )


# 将数据转换为json
def operation_func(key_list, value_list, number_index):
    result_dict = {}
    result_dict.setdefault( "date", key_list[number_index] )
    result_dict.setdefault( "closePoint", value_list[number_index] )
    return result_dict


# 将json转化为dict
def codes_json_transfer_dict():
    codes_path: str = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/codes.json"
    with open( codes_path, encoding='utf-8-sig', errors='ignore' ) as file:
        data: list = json.loads( file.read() )
        return list_json_transfer_dict( data )


# 将json.loads()返回的数组中的字典一个个读出来.
def list_json_transfer_dict(data: list):
    dict_message: dict = {}
    for info in data:
        dict_message.setdefault( info['code'], info['name'] )
    return dict_message


# 获取昨天的股票收盘日期.
def get_today_date():
    return time.strftime( "%Y-%m-%d", time.localtime( time.time() - 24 * 60 * 60 ) )


# 删除不在codes.json股票的json数据.
def delete_not_need_json(data: list):
    path = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/"
    share_dic: list = os.listdir( path )
    share_dic.remove( "codes.json" )
    for code in share_dic:
        if not data.__contains__( code ):
            os.remove( "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/" + code )

# 生成main_cpp 取执行
def generator_main_cpp():
    os.chdir("/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/cplusplus/")
    if not os.path.exists( "./main" ):
        command: str = "c++ -std=c++20 ./script_replace.cpp ./json/lib_json/*.cpp -I ./ -o main"
        os.system( command=command )

def main():
    codes_dict: dict = codes_json_transfer_dict()
    delete_not_need_json( list( codes_dict.keys() ) )
    ts.set_token( "c7c69ac9160c2ea56926e9bff890e837edc5aba4ce13cb736b695f69" )
    for shares_code in codes_dict.keys():
        data_get = ts.get_k_data( code=shares_code, start='2020-01-01', end=get_today_date(), autype='hfq' )
        print( "获取股票: " + codes_dict[shares_code] + "的数据." )
        shares_date: list = data_get['date'].values.tolist()
        shares_close: list = data_get['close'].values.tolist()
        json_transfer_file( shares_date, shares_close, shares_code )
    generator_main_cpp()

if __name__ == '__main__':
    main()

```python3.9
# -*- coding:utf-8 -*-
"""
# @author  apple
# @version 1.1
# @env     Pycharm Python3
# @desc    股票数据移动脚本
"""
import shutil
import os


def implement_replace():
    path = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python"
    source_path: str = path.__add__( "/static/indexes" )
    intermediate_path = path.removesuffix( "third-part-index-data-update-service/src/main/python" )
    replace_path: str = intermediate_path.__add__( "third-part-index-data-project/src/main/resources/static" )
    try:
        shutil.rmtree( replace_path.__add__( "/indexes" ) )
    except FileNotFoundError:
        print( "文件夹不存在或者已经被删除" )
    replace_path = replace_path.__add__( "/indexes" )
    os.mkdir( replace_path )
    file_list: list = os.listdir( source_path )
    for file in file_list:
        file = source_path.__add__( "/" + file )
        shutil.copy( file, replace_path )


def main():
    implement_replace()


if __name__ == '__main__':
    main()

```c++20
//
// @author apple
// @version 1.1
// @env Clion Clang 12.0.5
// @desc 股票数据JSON格式化.
//

#include <unordered_map>
#include <iostream>
#include <fstream>
#include <vector>

#include "json/json.h"

#define COUT std::cout
#define END  std::endl

class File {
private:
    std::vector<char> *vectorData = new std::vector<char>;

public:
    File() = default;

    ~File() {
        // 释放分配的空间
        delete this->vectorData;
    }

    void tuShare_json_replace_quotationMarks(const std::string &code);

    void replace_data(const std::string &code);

    static std::unordered_map<std::basic_string<char>, std::basic_string<char>> return_shares_code_to_name_map();
};

int main() {
    std::unordered_map<std::basic_string<char>, std::basic_string<char>> map = File::return_shares_code_to_name_map();
    for (auto &iter: map) {
        File file;
        std::string code = iter.first;
        std::string name = iter.second;
        COUT << "股票:" << name << ",开始进行单到双引号操作." << END;
        file.tuShare_json_replace_quotationMarks(code);
        file.replace_data(code);
    }
    return 0;
}

/**
 * @author apple
 * @param code 代码编号
 * @see File::tuShare_json_replace_quotationMarks(const std::string &code)
 *
 * 打开相关的JSON文件,将单引号转化为双引号.
 */
void File::tuShare_json_replace_quotationMarks(const std::string &code) {
    // 创建文件流
    char data;
    std::fstream fileStream;
    std::vector<char> vectorOne = {};
    std::string path = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/" + code + ".json";

    fileStream.open(path, std::ios::in | std::ios::out);
    if (!fileStream) {
        COUT << "文件打开失败" << END;
        return;
    }

    while (fileStream >> data) {
        if (data == 39) {
            // 将单引号转换为双引号.
            this->vectorData->emplace_back(34);
        } else {
            this->vectorData->emplace_back(data);
        }
    }
    // 关闭文件流
    fileStream.close();
}

/**
 * @author apple
 * @param code 代码编号
 * @see File::replace_data(const std::string &code)
 *
 * 将转化为完的数据覆盖原有的JSON文件.
 */
void File::replace_data(const std::string &code) {
    // 文件地址.
    std::string path = "/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/" + code + ".json";
    // 打开文件并清除文件原的内容.
    std::fstream fileStream(path, std::ios::in | std::ios::out | std::ios::trunc);
    if (!fileStream) {
        COUT << "打开文件失败" << END;
        return;
    }

    // 写入内容.
    for (auto i: *this->vectorData) {
        fileStream << i;
    }
    COUT << code + ".json, 单引号转化为双引号成功!" << END;
    // 关闭文件流
    fileStream.close();
}

/**
 * @author apple
 * @see File::return_shares_code_to_name_map()
 * @return unordered_map#map
 *
 * 通过Json解析器(cpp),获取相关的股票信息"代码和相关名称"以无序hash容器unordered_map保持信息!
 */
std::unordered_map<std::basic_string<char>, std::basic_string<char>> File::return_shares_code_to_name_map() {
    // 创建文件流
    std::fstream fileCodeShareStream("/Users/apple/IdeaProjects/springCloudParent/third-part-index-data-update-service/src/main/python/static/indexes/codes.json",
                                     std::ios::in | std::ios::out);
    std::unordered_map<std::basic_string<char>, std::basic_string<char>> map = {};
    if (!fileCodeShareStream) {
        COUT << "打开文件失败" << END;
        return map;
    }

    Json::Reader reader;
    Json::Value root;
    // 进行解析
    if (reader.parse(fileCodeShareStream, root)) {
        for (int i = 1; i <= root.size(); ++i) {
            Json::Value single_root = root[i - 1];
            std::string code = single_root["code"].asString();
            std::string name = single_root["name"].asString();
            map.emplace(code, name);
        }
    }
    // 关闭文件流
    fileCodeShareStream.close();
    return map;
}

							


1 个答案

luzhi0324
答案时间:2022-01-21
这个由于没有实现跨平台和对路径处理,特地处理这个问题,如何有何不对,请阁下斧正. (python3.9(必须)和 c++20(必须) 环境.)



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-12-19 感谢站长,19年1月1号开始学,11月份找到工作.现在工作了两年,回来把cloud学了,准备跳槽.
genglong

核电转Java,哈哈




1 个答案

how2j
答案时间:2022-02-02
666



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2021-02-03 终于做完了~
2020-10-29 公司拖欠工资半年实在买不起站长的教程。伤心
2020-06-20 完结了,相比天猫网站,我觉得这个项目更加简单些,可能是因为涉及前端的东西不多。但是该趟坑的还是趟坑,还好最后的解决了。


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 13 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-趋势投资SpringCloud-下载完整项目 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图