2020年扫福字,支付宝帮您全年还花呗,技术杨来给您送福字啦


生活,不要太纠结,岁月,不要太不舍,日子,不要太吝啬,梦想,不要太迷茫,一年是一个终点,新年是一个始点,愿2020年的你幸运相伴,成功相随,希望更多,幸福更长。

1.png2.png3.png4.png5.png6.png7.png8.png9.png10.png11.png12.png13.png14.png15.png16.png17.png18.png

新年里充满快乐的味道,人人脸上洋溢着幸福的欢笑。鞭炮驱走了沉闷的空气,礼花带来了喜庆的气氛。街巷里到处是热闹的场景,轻盈的舞步在歌曲声中更加令人痴迷。祝你万事如意,快乐无比!

我的特别年份,保护好我最爱的人。


临近过年,推荐一款高效抢票软件,比较良心的抢票软件


春运大概是每个人都会经历的,火车票总是一票难求。开始海淘抢票工具,尝试过很多的抢票工具,都不是特别的趁手。

发现分流抢票

分流抢票官网

官网截图

不得不说知乎的内容还是比较有质量的,没错这个工具就是在知乎上发现的。当时还觉得是个骗子,回家的心情还是让我选择了他。

了解分流抢票

日志界面、下载界面

日志部分截图

解压后大概就是这个样子

目录结构

在登录界面输入你的12306账号

登录界面

登陆后界面,非常简洁,正常购票流程

截图

官方版帮助文档

分流抢票官方文档

官方视频教程

目前我所知道的最好的抢票软件,欢迎大家尝试哦!

作者的话

分流抢票,是以用户为中心、人性化的抢票软件。不做广告、不做推广、不携带病毒、不收集隐私信息,并接受各方技术评测,全心全意为用户打造一款属于自己的抢票软件

前身是大二时历时一月开发的程序,几经风霜,经过了几年的时间不断的优化和更新迭代,时至今日,还在不断的维护当中,不忘初心。

分情破爱始乱弃,流落天涯思别离。

如花似玉负情意,影如白昼暗自迷。

随风浮沉千叶落,行色匆匆鬓已稀。

一首藏头,讲得清未来,却倒不回过去,执着只为你,愿你一切安好。

任何软件都是辅助程序,不能保证100%的抢到,所有的成果都需要用户努力和坚持。


介绍开源的网易云音乐 NodeJS 版 API,划重点这是个开源项目


发现它就要从大二参加山东省齐鲁软件设计大赛说起,我们的团队叫做神鸟工作室。名字是挺土的,不过结局还好,拿到了二等奖(100块奖金:joy:)。项目是一个音乐软件,我们卡在了音乐来源上面,当时年少轻狂想着全网搜索音乐。当时的我们技术真的是做不到这个,本人开始想办法(不是多牛逼,其实是我真能巴拉),然后就有了下文。

项目介绍

项目地址

文档地址

文档截图

这是基于跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API实现的网易云音乐api

实现情况

全部接口已升级到最新
具备登录接口,多达100多个接口
更完善的文档

基本功能、特性(部分)

基本功能、特性(部分)

运行这个一本正经的项目

安装项目

$ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git

$ npm install

运行项目

$ node app.js

服务器启动默认端口为 3000, 若不想使用 3000 端口 , 可使用以下命令 : Mac/Linux

$ PORT=4000 node app.js

windows 下使用 git-bash 或者 cmder 等终端执行以下命令 :

$ set PORT=4000 && node app.js

服务器启动默认 host 为localhost,如果需要更改, 可使用以下命令 : Mac/Linux

$ HOST=127.0.0.1 node app.js

windows 下使用 git-bash 或者 cmder 等终端执行以下命令 :

$ set HOST=127.0.0.1 && node app.js

在这里非常感谢这个项目的作者,非常好的开源项目。

不久的将来,我会上线这个api,免费供网友使用。全免费哦,为保证服务器稳定运行,可能会限制次数,如您有需要可为您在您的主机上免费搭建专属音乐api服务,不收费哦。


拖鞋哥哥


很早以前他让我帮他写一篇文章,我立马答应了他但一直没有写,现在写起来觉得有些难度,不知道写些什么内容。技术我是不懂的随便写一点我们之间的故事吧。

我俩大概是在九月份认识的吧,算了也记不清楚了,这人挺有意思的加上我的微信说忘了我是哪个人了,哈哈,分分钟想打他。记得我们第一次约着出去玩那时候是刚下过雨他穿着拖鞋裤衩去见我,我问他为什么穿拖鞋他说鞋子踩水湿透了,这就是我们第一次见面也是第一次说话,说的就是你为什么穿着拖鞋就来了~~~~~~~~~

没在一起的时候他经常问我你觉得爱情是什么,这种空而大的问题我着实是回答不上来甚至觉得有些矫情,我记得我经常告诉他我崇尚柏拉图式的爱情,他不懂什么是柏拉图,自行百度后的他对我嗤之以鼻,我是一个追星女孩,我们为此吵过一架,最后大概是我赢吧。后来我把柏拉图爱情告诉了朋友,他总结说我并不是什么柏拉图崇尚者而是对爱情存在着一些不切实际的幻想缺乏安全感的表现,他说的不无道理但我也没有全部承认他说的完全正确。后来时间久了我发现关于什么是爱情这种空而大的问题我是无法回答的,只是觉得把握现在的就刚刚好了。

使用Python抓取12306火车信息,存入csv文件,仅介绍实现思路


马上就要年底过年了,提前去网站上请回家的票。神奇的抢到了硬座票,心里很是欣慰,今年终于不用站着回家了。
但是开心的时间总是那么短暂,一周过后我回来继续抢返程的火车票。真的是查了好几遍,都没有返程的车,多方验证之后发现没有返程的列车,所以……

网站抓取思路

打开12306的官方网站,按F12打开你的开发人员工具,找到Network标签,F5刷新一下,获取车站信息。

列车车次信息列表

获取车站信息

部分数据

var station_names ='@bjb|北京北|VAP|beijingbei|bjb|0@bjd|北京东|BOP|beijingdong|bjd|1@bji|北京|BJP|beijing|bj|2@bjn|北京南|VNP|beijingnan|bjn|3@bjx|北京西|BXP|beijingxi|bjx|4@gzn|广州南|IZQ|guangzhounan|gzn|…………
获取所有车次信息(朋友提供)

列车车次信息列表

车次详细信息查询

列车车次信息查询页面

查询到的信息

车次详细信息查询接口(G126为例)

按自己需求实现部分功能,部分功能不对外开放,仅介绍抓取思路
# -*- coding:utf-8 -*-
'''
车次信息查询页面
https://kyfw.12306.cn/otn/queryTrainInfo/init
车次信息查询接口
https://kyfw.12306.cn/otn/queryTrainInfo/query?leftTicketDTO.train_no=5i0000G12600&leftTicketDTO.train_date=2020-01-24&rand_code=

车站信息
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9138
车次信息
https://kyfw.12306.cn/otn/resources/js/query/train_list.js
'''
import json

import requests


class MainApp(object):
    def __init__(self):
        self.session = requests.session()

    def start(self):
        self.get_station_name()
        self.get_train_list()
        pass

    # 抓取火车车次信息
    def get_train_list(self):
        line = self.session.get('https://kyfw.12306.cn/otn/resources/js/query/train_list.js').text
        item = line.replace('var train_list =', '')
        json_now = json.loads(item)['2019-10-10']
        with open('train_list.csv', 'w+') as train_list_csv:
            train_list_csv.write('字段1,字段2,字段3,字段4,字段5,字段6,字段7')
            # 高铁
            for g in json_now['G']:
                print(g)
                no = g['train_no']
                station_train_code = str(g['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '高铁', 'G', che, se[0], se[1], '2019-10-10'))
            # 城际高铁
            for c in json_now['C']:
                print(c)
                no = c['train_no']
                station_train_code = str(c['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '城际高铁', 'C', che, se[0], se[1], '2019-10-10'))
            # 动车
            for d in json_now['D']:
                print(d)
                no = d['train_no']
                station_train_code = str(d['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '动车', 'D', che, se[0], se[1], '2019-10-10'))
            # 直达
            for z in json_now['Z']:
                print(z)
                no = z['train_no']
                station_train_code = str(z['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '直达', 'Z', che, se[0], se[1], '2019-10-10'))
            # 特快
            for t in json_now['T']:
                print(t)
                no = t['train_no']
                station_train_code = str(t['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '特快', 'T', che, se[0], se[1], '2019-10-10'))
            # 快速
            for k in json_now['K']:
                print(k)
                no = k['train_no']
                station_train_code = str(k['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '快速', 'K', che, se[0], se[1], '2019-10-10'))
            # 其他
            for o in json_now['O']:
                print(o)
                no = o['train_no']
                station_train_code = str(o['station_train_code'])
                che = station_train_code[0:station_train_code.find('(')]
                se = station_train_code[station_train_code.find('(') + 1:-1].split('-')
                train_list_csv.write('\n%s,%s,%s,%s,%s,%s,%s' % (no, '其他', 'O', che, se[0], se[1], '2019-10-10'))

    # 抓取火车站信息
    def get_station_name(self):
        line = self.session.get('https://kyfw.12306.cn/otn/resources/js/framework/station_name.js').text
        item = line.replace('var station_names =\'', '').replace('\';', '').split('|')
        print(item)
        with open('station_name.csv', 'w+') as station_name_csv:
            station_name_csv.write('字段1,字段2,字段3,字段4,字段5,字段6')
            for i in item:
                if '@' in i:
                    station_name_csv.write('\n%s' % i)
                else:
                    station_name_csv.write(',%s' % i)


if __name__ == '__main__':
    main = MainApp()
    main.start()

抓取数据存入csv,后续会入库,提供个性化的查询,也会给出快捷跳转至12306官网查询页面,直接进行购票。

模拟正常人行为进行查询获取公共数据,防止对网站造成压力(我相信我做不到)

不做商业使用,进个人网站展示,展示功能不保证高可用,仅作学习交流分享出现。