最初に私のマイクロチャネル公共番号に登場したこの記事:小さな水ヶ月の長いです
オリジナルリンク:https://mp.weixin.qq.com/s/dIn1YsM_i-o76BVAIrPAhA
応募者の数が今年は準猿プログラムの入り口を基準として3年前、1031万の新しい高に達し、明日、大学入試のための時間で、残業はスクラッチ入り口のチェックポイントを作られた毎年恒例の大学入試、大学入試でアプレットは、ベネディクト・カレッジ上海キャンパスの入学式にベテラン師匠とみなすことができます。このアプレットについて、あなたは私の以前の記事を参照してくださいすることができます
https://mp.weixin.qq.com/s/f78npxbhNrwjmtUzX5VhTQ
主原則と技術的な実装の詳細についての話を今日。
#ソース
アプレットの背景には、三巻で新カリキュラムの基準、新カリキュラムの基準をVOLS、すべての主要な大学の各バッチの芸術の入場の2008年から2017年部門を含むデータのほぼ30ワットの合計だけでなく、すべてのロール2008年から2018年のための新しいカリキュラムの標準の使用を含め種類の自律州と入学の専門家職業バッチにTiqianパイからいくつかの提案は、有益。
データの膨大な量の、速度を向上させるために、同時に複数のタスクを実行するために構築スレッドプールにThreadPoolExecutorでconcurrent.futures(必要Python3.5 +)モジュールを使用するため、すべてのデータは、各入口様々な高等教育機関と関連サイトから収集しました。
PgSQLのを使用してデータベースには、世界で最も強力なオープンソースデータベース製品として知られている、すべてのデータが存在新しい二つのテーブルの下にバッチgaokaoデータベース、大学(大学入試のポイント)と地域(地方のです二行目)
大学のテーブルショー
フィールド | 説明 |
---|---|
名前 | 学校名 |
stu_loc | 新学生 |
stu_wl | 文理科 |
パーソナルコンピュータ | 入場バッチ |
年 | 年 |
スコア | 入場料の平均 |
州のテーブルショー
フィールド | 説明 |
---|---|
年 | 年 |
stu_loc | 候補者の場所 |
stu_wl | 文理科 |
パーソナルコンピュータ | バッチ |
コントロール | このバッチ最小制御線 |
30ワットデータの量、複数のサイト、同時クロール、データの衝突が挿入前、不可避であり、そのような次に、このレコードを大学のPCフィールドを欠落データのテーブルを挿入するときのように、不完全な第一フィルタリングされたデータ、それは最も深刻なデータの重複で、破棄しなければならない、ソリューションIの使用は次のとおりです。最初、データを挿入するクエリがすでに存在しているかどうか、主キーの大学のテーブルには、理由は実用的な制約のため、(名前、STU、stu_wl、PC、年)であります大学は、バッチ内の唯一の年には、唯一のカテゴリ平均入場も、そうでない場合は、最後の挿入の実装前に、トランザクションをコミットするためにコミットすることができます。
背景のビルド
取得するデータの30ワットの後、私はライン遭遇した大きな問題にアプレット上で、でもFBIによって開発者用ツールの後にアリクラウドサーバ、小さなプログラムの最後に展開された背景には、達成するためにフラスコ+ PgSQLのモデルを使用して背景を意図しプログラムは、IPアドレスを介して実行されている小さなラインを必要とするため、背景にアクセスすることができない、比較的時間のかかる、ドメイン名の登録を介してアクセス可能ドメイン名は非常に面倒ではありません購入、しかし、レコードのドメイン名必要があり、より多くの週間以上必要とし、以下の入り口から5よりもありました日、無力は、誤って小さなクラウド開発プログラムを見たとき、アプレットクラウド開発に、導入の公式ウェブサイトは次のとおりです。
開発者は、あなたがクラウド機能を使用することができますサーバーを設定することなく、マイクロ文字、ゲームを開発するための小さなプログラムを開発するために、クラウドを使用することができます。
クラウドバックエンドのメンテナンスのコンセプトや操作を弱め、コアビジネスの発展により提供プラットフォームを使用してサーバー、APIを構築することなく、我々はオンラインと繰り返し迅速な達成することができ、ネイティブクラウドのサポートおよびマイクロチャネルサービスサポートの開発者のための完全なを提供するために、開発、およびこの能力クラウドサービスの開発者はすでに相互に互換性を使用して、彼らは相互に排他的ではありません。
言い換えれば、限り、背景が付属しています小さなプログラムへのデータは、あなたがこれらのデータに小さなプラットフォームAPIプログラムからアクセスできるよう、あらかじめ、LeanCloudクラウドクラウド爆弾第三者を理解し、小さなプログラムは、現在、これらの機能を統合し期待していませんでしたテンセントは、それを賞賛する必要があります。
つまり、次のタスクは、舞台裏、バックオフィスサポートデータのインポートJSON形式またはCSV形式知られる小さなプログラムのインポート背景データに主です。だから私は、JSONファイルにローカルデータベースからエクスポートデータにスクリプトを書きました:
import psycopg2
import json
# 连接 pgsql 数据库,为保证隐私,密码已隐藏
conn = psycopg2.connect(database="gaokao", user="postgres", password="*******", host="127.0.0.1", port="5432")
cur = conn.cursor()
cur.execute('select stu_loc,year,stu_wl,pc,control from province')
result = []
query_res = cur.fetchall()
for i in query_res:
item = {}
item['stu_loc'] = i[0]
item['year'] = i[1]
item['wl'] = i[2]
item['pc'] = i[3]
item['score'] = i[4]
result.append(item)
# indent=2 控制 json 格式的缩进
# ensure_ascii 控制中文的正常显示
with open("province.json", 'w', encoding="utf-8") as f:
f.write(json.dumps(result, indent=2, ensure_ascii=False))
{}そこ形式の通常の意味での私たちの間にピット、楽屋アプレットに必要なJSON形式とJSONはほとんど差がまず第一に、JSONのすべての内容は、それらをすること[と]含めることはできません、そこで説明する必要もあり、それぞれがありますデータ項目のカンマを得ることができないことを含みます。
選択メモ帳++ JSON、元のファイルを開くReplace関数を使用し、解決[と]のスペースを置き換えることができ、プットは}}置き換えることができます。
修正後は、JSONファイルをインポートすることで、小さなバックグラウンドプログラムは、ビルドの背景には、基本的に完成します。
小さなプログラムの終了を書きます
小さなプログラムの終了を書くことについて、私は、主に以下のインターフェースとして、最初のページが書き込まれ、2人の経験について話しています。
最初は、この効果を達成したい、ノーアイデア、そして最終的にはこのドロップダウンボックスの対応するレイアウト面積の大学が隠れによってwxmlファイル制御に隠されている=真の初めに考えられてきたカスタムモーダルポップアップから、クリック地域/大学のドロップダウンボックスは、存在する場合に隠れ属性はもちろん、他のレイアウトを隠すためにtrueにすべてのこれらのレイアウトを作るために設定されている間に隠された属性のレイアウトの開始に対応する他のドロップダウンボックスは、その後、falseで、falseに隠されたセットを置きます、JSのLiのsetData(によってtrueまたはfalseの必要性は)動的ビュー・レイヤーをレンダリングするためのデータ層から変更されたデータを改変あります。
第二は、ネイティブクラウドバグの開発に小さなプログラムである、背景クエリのみすべてのマッチング結果を得るために、一度達成するために20までのデータを照会、次の2つの問題を解決する必要があり、最初の質問は、当然だと思うことができました第二は、20をスキップし、その後20、40を取り、次いで第20をスキップする前に、オンに取る前に、最初のデータは、20で見つかった後、より致命的な問題がある、クエリ、完全なデータを確実にするために、コールバック最初のクエリを記述するために2番目のクエリの必要性である結果を得るために、バックグラウンドの非同期コールバックAPI、コールバック2番目のクエリを記述するための第三のクエリが必要で、しかし、あなたが明示的に照会する回数を知っているので、どのように多くの層ネストされたのと同じ変数は、カバレッジの問題ある書き込みに迷惑な必要性はないことができ、これは、非同期の地獄と呼ばれています。この問題を解決するために、我々は次のようになり、同期の非同期メソッド、にこれを有効にするコードを記述する必要があります。
インポート機能のJS runtime.jsページファイルに追加し、適切なフォルダにファイルruntime.jsする
;
のconst = regeneratorRuntime(「... /ランタイム」)が必要です。
runtime.jsダウンロード:https://github.com/inspurer/CampusPunchcard/blob/master/runtime.js
以下の例では、コード補完のビジネスロジックをエミュレート:
// 查询可能较慢,最好加入加载动画
wx.showLoading({
title: '加载中',
})
const countResult = await db.collection('province').where({
stu_loc: name,
pc: pici,
}).count()
const total = countResult.total
//计算需分几次取
const batchTimes = Math.ceil(total / MAX_LIMIT)
// 承载所有读操作的 promise 的数组
//初次循环获取云端数据库的分次数的promise数组
for (let i = 0; i < batchTimes; i++) {
const promise = await db.collection('province').where({
stu_loc: name,
pc: pici,
}).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
//二次循环根据获取的promise数组的数据长度获取全部数据push到newResult数组中
for (let j = 0; j < promise.data.length; j++) {
var item = {};
item.code = i * MAX_LIMIT + j;
item.name = promise.data[j].stu_loc;
item.year = promise.data[j].year;
item.wl = promise.data[j].wl;
item.pc = promise.data[j].pc;
item.score = promise.data[j].score;
console.table(promise.data)
newResult.push(item)
}
}
if (newResult.length != 0) {
that.setData({
hasdataFlag: true,
resultData: newResult
})
} else {
that.setData({
hasdataFlag: false,
resultData: newResult
})
}
// 隐藏加载动画
wx.hideLoading()
これらは、批判を歓迎し、私はこの経験を開発したアイデアの一部です。