
文章采集調用
解讀:【精選小說(shuō)】文章采集調用bing程序的作用呢?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2022-11-28 15:32
文章采集調用bing爬蟲(chóng)程序的方法,直接用爬蟲(chóng)就能采集大量數據,但是bing爬蟲(chóng)對我們來(lái)說(shuō)又有什么作用呢?bing云采集網(wǎng)站抓取的頁(yè)面標題,地址和數據應該是一個(gè)獨立的頁(yè)面嗎?應該獨立在某個(gè)頁(yè)面上嗎?要達到什么效果?可以調用嗎?公眾號查詢(xún)【精選小說(shuō)】文章采集使用sublime安裝pythonsublime有windows版,需要一個(gè)安裝visualstudiocode的編輯器。
使用pythonsublime怎么采集bing云采集結果地址對應的云采集地址可以調用嗎?可以調用的方法就是chrome云采集selenium+pyseleniumwindows版chrome采集用pyselenium之前需要編寫(xiě)一段腳本,用它運行腳本,然后在bing頁(yè)面上隨機輸入地址,是沒(méi)有數據的。pythonsublime插件,需要編寫(xiě)代碼如果開(kāi)發(fā)團隊有開(kāi)發(fā)的python的項目,為了盡快在pythonsublime的工作環(huán)境中測試腳本,可以將腳本寫(xiě)成c和c++,ruby等語(yǔ)言編寫(xiě)。
這個(gè)項目叫做pythonwebdriver的selenium,用于windows,linux和mac桌面環(huán)境下開(kāi)發(fā)爬蟲(chóng)程序??梢宰孕邪俣炔榭碿hromecss開(kāi)發(fā)社區??梢詫胂螺d的js文件,此外還需要安裝下載助手。在項目目錄下,會(huì )發(fā)現出現一個(gè)chrome/webdriver.swig。解壓??匆幌略创a:腳本在解壓后目錄中應該有一個(gè).py。
內置的爬蟲(chóng)程序。下載:百度云下載幫助文件,用next找到要下載的文件,然后copy。一般我這邊下載是128m這個(gè)大小。右鍵點(diǎn)擊以管理員身份運行,選擇copymetadata到,復制源碼粘貼到運行中,測試。運行成功之后,就生成了一個(gè)文件,具體如下:運行成功之后,查看項目目錄下生成的文件,沒(méi)看到.py,而看到的是這樣的:現在我們先在另一臺電腦上安裝bing,在安裝bing之前,需要添加環(huán)境變量。
添加到visualstudiocode的extensions的plugins文件夾中。path中加入;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%。 查看全部
解讀:【精選小說(shuō)】文章采集調用bing程序的作用呢?
文章采集調用bing爬蟲(chóng)程序的方法,直接用爬蟲(chóng)就能采集大量數據,但是bing爬蟲(chóng)對我們來(lái)說(shuō)又有什么作用呢?bing云采集網(wǎng)站抓取的頁(yè)面標題,地址和數據應該是一個(gè)獨立的頁(yè)面嗎?應該獨立在某個(gè)頁(yè)面上嗎?要達到什么效果?可以調用嗎?公眾號查詢(xún)【精選小說(shuō)】文章采集使用sublime安裝pythonsublime有windows版,需要一個(gè)安裝visualstudiocode的編輯器。

使用pythonsublime怎么采集bing云采集結果地址對應的云采集地址可以調用嗎?可以調用的方法就是chrome云采集selenium+pyseleniumwindows版chrome采集用pyselenium之前需要編寫(xiě)一段腳本,用它運行腳本,然后在bing頁(yè)面上隨機輸入地址,是沒(méi)有數據的。pythonsublime插件,需要編寫(xiě)代碼如果開(kāi)發(fā)團隊有開(kāi)發(fā)的python的項目,為了盡快在pythonsublime的工作環(huán)境中測試腳本,可以將腳本寫(xiě)成c和c++,ruby等語(yǔ)言編寫(xiě)。
這個(gè)項目叫做pythonwebdriver的selenium,用于windows,linux和mac桌面環(huán)境下開(kāi)發(fā)爬蟲(chóng)程序??梢宰孕邪俣炔榭碿hromecss開(kāi)發(fā)社區??梢詫胂螺d的js文件,此外還需要安裝下載助手。在項目目錄下,會(huì )發(fā)現出現一個(gè)chrome/webdriver.swig。解壓??匆幌略创a:腳本在解壓后目錄中應該有一個(gè).py。

內置的爬蟲(chóng)程序。下載:百度云下載幫助文件,用next找到要下載的文件,然后copy。一般我這邊下載是128m這個(gè)大小。右鍵點(diǎn)擊以管理員身份運行,選擇copymetadata到,復制源碼粘貼到運行中,測試。運行成功之后,就生成了一個(gè)文件,具體如下:運行成功之后,查看項目目錄下生成的文件,沒(méi)看到.py,而看到的是這樣的:現在我們先在另一臺電腦上安裝bing,在安裝bing之前,需要添加環(huán)境變量。
添加到visualstudiocode的extensions的plugins文件夾中。path中加入;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%。
解決方案:web開(kāi)發(fā)中如何快速開(kāi)發(fā)標準?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-11-28 12:25
文章采集調用百度收錄-提取請求參數getheaderbyormer提取關(guān)鍵字直接編譯下getheaderbyormer成java腳本,生成jar然后調用即可先直接在http請求的getheaderbyformer用-g打開(kāi)獲取到的參數xml然后使用java反射最終構造出java類(lèi)作為參數提交到web頁(yè)面中開(kāi)發(fā)還是maven比較方便可以管理版本和依賴(lài)項,發(fā)布到服務(wù)器,更方便代碼更穩定。
樓上建議maven的非常對,但是我覺(jué)得你還需要了解一個(gè)東西,就是spring整個(gè)的生態(tài)圈,如果使用的netty,那么我覺(jué)得你可以參考maven來(lái)實(shí)現,他不是唯一的做事情的方式,但是做web開(kāi)發(fā),用maven肯定不是最佳方式,沒(méi)有看到過(guò)用jpa的,畢竟web開(kāi)發(fā)的難度還是比較大的。我個(gè)人覺(jué)得spring使用用,相比jpa而言做開(kāi)發(fā)難度就降低不少。
如果要更快速的話(huà)我建議使用ejb標準,現在ejb泛濫,效率極其低,企業(yè)環(huán)境下不常用,也很難改。企業(yè)環(huán)境是一個(gè)復雜度很高的問(wèn)題,往往涉及到架構本身的設計,系統的性能優(yōu)化,業(yè)務(wù)復雜度,單體環(huán)境對網(wǎng)絡(luò )和硬件的要求,權限劃分,數據庫同步等問(wèn)題。而spring讓這些復雜的內容成為可能,但是真正想要快速開(kāi)發(fā),還是推薦maven,要不然又是spring的一堆坑。
對于如何快速,我可以給出一個(gè)看起來(lái)比較容易實(shí)現的方法:1.批量抓取百度首頁(yè)(每頁(yè)),提取出高頻的關(guān)鍵字組合;2.對關(guān)鍵字進(jìn)行md5+hash加密,用于加密之后的參數;3.然后提取出低頻詞或者模糊搜索關(guān)鍵字,放入正則;4.放入所需的參數中即可,譬如用戶(hù)。 查看全部
解決方案:web開(kāi)發(fā)中如何快速開(kāi)發(fā)標準?
文章采集調用百度收錄-提取請求參數getheaderbyormer提取關(guān)鍵字直接編譯下getheaderbyormer成java腳本,生成jar然后調用即可先直接在http請求的getheaderbyformer用-g打開(kāi)獲取到的參數xml然后使用java反射最終構造出java類(lèi)作為參數提交到web頁(yè)面中開(kāi)發(fā)還是maven比較方便可以管理版本和依賴(lài)項,發(fā)布到服務(wù)器,更方便代碼更穩定。

樓上建議maven的非常對,但是我覺(jué)得你還需要了解一個(gè)東西,就是spring整個(gè)的生態(tài)圈,如果使用的netty,那么我覺(jué)得你可以參考maven來(lái)實(shí)現,他不是唯一的做事情的方式,但是做web開(kāi)發(fā),用maven肯定不是最佳方式,沒(méi)有看到過(guò)用jpa的,畢竟web開(kāi)發(fā)的難度還是比較大的。我個(gè)人覺(jué)得spring使用用,相比jpa而言做開(kāi)發(fā)難度就降低不少。

如果要更快速的話(huà)我建議使用ejb標準,現在ejb泛濫,效率極其低,企業(yè)環(huán)境下不常用,也很難改。企業(yè)環(huán)境是一個(gè)復雜度很高的問(wèn)題,往往涉及到架構本身的設計,系統的性能優(yōu)化,業(yè)務(wù)復雜度,單體環(huán)境對網(wǎng)絡(luò )和硬件的要求,權限劃分,數據庫同步等問(wèn)題。而spring讓這些復雜的內容成為可能,但是真正想要快速開(kāi)發(fā),還是推薦maven,要不然又是spring的一堆坑。
對于如何快速,我可以給出一個(gè)看起來(lái)比較容易實(shí)現的方法:1.批量抓取百度首頁(yè)(每頁(yè)),提取出高頻的關(guān)鍵字組合;2.對關(guān)鍵字進(jìn)行md5+hash加密,用于加密之后的參數;3.然后提取出低頻詞或者模糊搜索關(guān)鍵字,放入正則;4.放入所需的參數中即可,譬如用戶(hù)。
解決方案:最簡(jiǎn)單的方法,優(yōu)采云 采集后直接導入到wordpress的數據庫
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-11-28 12:24
采集后直接導入到wordpress的數據庫
很多人用wordpress做網(wǎng)站,用優(yōu)采云
采集
,但不會(huì )發(fā)布。這里有一個(gè)簡(jiǎn)單的方法,可以瞬間將采集
到的內容直接發(fā)布到wordpress
優(yōu)點(diǎn):簡(jiǎn)單、快速、一目了然。
缺點(diǎn):發(fā)布文章的分類(lèi)標簽需要手動(dòng)編輯。
更適合純文本,或者像尷尬百科這樣的笑話(huà)網(wǎng)站
不談采集
,只談出版,
這里是最簡(jiǎn)單的演示,只發(fā)布內容和標題,要發(fā)布其他內容,照著(zhù)做即可。
首先找到默認模板:
然后將模板更改為這樣的東西,
這段代碼是怎么來(lái)的?了解數據庫的人一看就會(huì )知道。如果你不懂數據庫,叫你哥是一種簡(jiǎn)單的方式??臻g帶的mysql數據庫有運行界面phpmyadmin,一般空間都有。打開(kāi)找到wp-post表,插入一條數據:這條數據,只填content和title
, 其他留空
然后點(diǎn)擊執行,你會(huì )看到這樣一段代碼:
插入 `DatabaseName`.`wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status` , `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count `) VALUES (NULL, '0', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '內容 xxxxxxx', '標題 XXXXXXXX', '', '發(fā)布', '打開(kāi)', '打開(kāi)', '', '', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', ' ', '0', '', '0', '發(fā)布', '', '0');
替換:數據庫名稱(chēng) -> 你的數據庫名稱(chēng)
匯總:Python如何采集關(guān)鍵詞數據
對于SEO來(lái)說(shuō),關(guān)鍵詞的排名對網(wǎng)站優(yōu)化起著(zhù)決定性的作用。關(guān)鍵詞排名、流量來(lái)源、同行網(wǎng)站數據都可以通過(guò)SEO查詢(xún)。常見(jiàn)的愛(ài)站站長(cháng)工具、站長(cháng)工具和5118都是不錯的網(wǎng)站。
當然現在5118更全面,應用更廣泛!
在數據和功能上,5118很強大!
可以的話(huà)就付錢(qián)!
5118的抗爬還是很不錯的!
需要登錄領(lǐng)取,發(fā)現5118更新了一次!
比如登錄賬號需要經(jīng)過(guò)滑塊驗證碼的反爬限制,關(guān)鍵詞索引等數據以圖片加密的形式展示。這人渣破解不了,就怕了。.
不過(guò)有些數據還是可以參考的!所以,讓 python 起來(lái)!
打聽(tīng)一下設計網(wǎng)站,關(guān)鍵詞設計迷信現狀
抓取網(wǎng)址:
如果您不是付費會(huì )員,您只能查看前100頁(yè)的數據!
很多數據都是反爬限制,有點(diǎn)可惜!
雖然5118會(huì )員登錄有滑塊驗證碼,但是cookies登錄還是非常好用的!
我們手動(dòng)添加 cookie 以登錄以采集
所需數據。
幾個(gè)關(guān)鍵點(diǎn):
1.添加協(xié)議頭
headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': ua,
'X-Requested-With': 'XMLHttpRequest',
}
自行添加ua和cooikes!
當然這是一個(gè)完整的協(xié)議頭,有些可以刪掉,大家可以自己試試!
2. zip函數的使用及格式化數據處理
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
3.排名波動(dòng)的處理
通過(guò)源碼查詢(xún)可以知道,綠色表示排名上升,紅色表示排名下降。這里有一個(gè)判斷就搞定了!
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
4. 關(guān)鍵詞 將數據寫(xiě)入csv
寫(xiě)了一個(gè)案例,發(fā)現了兩個(gè)參考案例
import csv
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#參考一
def write_csv(self):
path = "aa.csv"
with open(path, 'a+') as f:
csv_write = csv.writer(f)
data_row = ["1", "2"]
<p>
csv_write.writerow(data_row)
# 參考二
def wcsv(self):
csvfile = open('csvtest.csv', 'w')
writer = csv.writer(csvfile)
writer.writerow(['keywords'])
data = [
('1', 'http://www.xiaoheiseo.com/', '小黑'),
('2', 'http://www.baidu.com/', '百度'),
('3', 'http://www.jd.com/', '京東')
]
writer.writerows(data)
csvfile.close()
</p>
5、查詢(xún)網(wǎng)站相關(guān)關(guān)鍵詞數據,寫(xiě)入excel表格
使用第三方庫, xlsxwriter
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
由于頁(yè)碼也是js生成的,所以沒(méi)有找到,所以自己輸入頁(yè)碼!
輸入查詢(xún)網(wǎng)站的URL格式為:抓取后數據存儲文件使用主域名!
附上完整代碼:
#5118網(wǎng)站關(guān)鍵詞數據獲取
import requests
from lxml import etree
from urllib.parse import unquote
import xlsxwriter
import time
import csv
class C5118(object):
def __init__(self,url,nums):
self.keyword_datas=[]
self.data_lists=[]
self.index_links_hrefs=[]
self.headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': UA,
'X-Requested-With': 'XMLHttpRequest',
}
self.post_url=url
self.file_name=url.split('.')[1]
self.pagenums=nums
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
<p>
#獲取數據
def get_data(self,pagenum):
url="https://www.5118.com/seo/baidupc"
params={
'isPager': 'true',
'viewtype': '2',
'days': '90',
'url': self.post_url,
'orderField': 'Rank',
'orderDirection': 'asc',
'pageIndex': pagenum, #頁(yè)碼
'catalogName': '',
}
response=requests.post(url,params=params,headers=self.headers)
time.sleep(1)
print(response.status_code)
doc=etree.HTML(response.content.decode('utf-8'))
keywords= doc.xpath('//tr[@class="list-row"]/td[1]/a/text()') #關(guān)鍵詞
print(keywords)
self.keyword_datas.extend(keywords)
ranks = doc.xpath('//tr[@class="list-row"]/td[2]/a') #排名
titles = doc.xpath('//tr[@class="list-row"]/td[5]/a/text()') #網(wǎng)頁(yè)標題
links=doc.xpath('//tr[@class="list-row"]/td[5]/a/@href') #網(wǎng)頁(yè)鏈接
index_links=doc.xpath('//tr[@class="list-row"]/td[7]/a/@href') #長(cháng)尾詞數量鏈接
self.index_links_hrefs.extend(index_links)
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
self.data_lists.append(data)
time.sleep(4)
return self.data_lists
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
def main(self):
for i in range(1,self.pagenums+1):
print(f'>>> 正在采集第{i}頁(yè)關(guān)鍵詞數據...')
self.get_data(i)
print("數據采集完成!")
self.write_keywords()
self.write_to_xlsx()
if __name__=="__main__":
url = "www.shejipi.com"
nums=100
spider=C5118(url,nums)
spider.main()
</p> 查看全部
解決方案:最簡(jiǎn)單的方法,優(yōu)采云
采集后直接導入到wordpress的數據庫
很多人用wordpress做網(wǎng)站,用優(yōu)采云
采集
,但不會(huì )發(fā)布。這里有一個(gè)簡(jiǎn)單的方法,可以瞬間將采集
到的內容直接發(fā)布到wordpress
優(yōu)點(diǎn):簡(jiǎn)單、快速、一目了然。
缺點(diǎn):發(fā)布文章的分類(lèi)標簽需要手動(dòng)編輯。
更適合純文本,或者像尷尬百科這樣的笑話(huà)網(wǎng)站
不談采集
,只談出版,

這里是最簡(jiǎn)單的演示,只發(fā)布內容和標題,要發(fā)布其他內容,照著(zhù)做即可。
首先找到默認模板:
然后將模板更改為這樣的東西,

這段代碼是怎么來(lái)的?了解數據庫的人一看就會(huì )知道。如果你不懂數據庫,叫你哥是一種簡(jiǎn)單的方式??臻g帶的mysql數據庫有運行界面phpmyadmin,一般空間都有。打開(kāi)找到wp-post表,插入一條數據:這條數據,只填content和title
, 其他留空
然后點(diǎn)擊執行,你會(huì )看到這樣一段代碼:
插入 `DatabaseName`.`wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status` , `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count `) VALUES (NULL, '0', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '內容 xxxxxxx', '標題 XXXXXXXX', '', '發(fā)布', '打開(kāi)', '打開(kāi)', '', '', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', ' ', '0', '', '0', '發(fā)布', '', '0');
替換:數據庫名稱(chēng) -> 你的數據庫名稱(chēng)
匯總:Python如何采集關(guān)鍵詞數據
對于SEO來(lái)說(shuō),關(guān)鍵詞的排名對網(wǎng)站優(yōu)化起著(zhù)決定性的作用。關(guān)鍵詞排名、流量來(lái)源、同行網(wǎng)站數據都可以通過(guò)SEO查詢(xún)。常見(jiàn)的愛(ài)站站長(cháng)工具、站長(cháng)工具和5118都是不錯的網(wǎng)站。
當然現在5118更全面,應用更廣泛!
在數據和功能上,5118很強大!
可以的話(huà)就付錢(qián)!
5118的抗爬還是很不錯的!
需要登錄領(lǐng)取,發(fā)現5118更新了一次!
比如登錄賬號需要經(jīng)過(guò)滑塊驗證碼的反爬限制,關(guān)鍵詞索引等數據以圖片加密的形式展示。這人渣破解不了,就怕了。.
不過(guò)有些數據還是可以參考的!所以,讓 python 起來(lái)!
打聽(tīng)一下設計網(wǎng)站,關(guān)鍵詞設計迷信現狀
抓取網(wǎng)址:
如果您不是付費會(huì )員,您只能查看前100頁(yè)的數據!
很多數據都是反爬限制,有點(diǎn)可惜!
雖然5118會(huì )員登錄有滑塊驗證碼,但是cookies登錄還是非常好用的!
我們手動(dòng)添加 cookie 以登錄以采集
所需數據。
幾個(gè)關(guān)鍵點(diǎn):
1.添加協(xié)議頭
headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': ua,
'X-Requested-With': 'XMLHttpRequest',
}
自行添加ua和cooikes!
當然這是一個(gè)完整的協(xié)議頭,有些可以刪掉,大家可以自己試試!
2. zip函數的使用及格式化數據處理
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
3.排名波動(dòng)的處理
通過(guò)源碼查詢(xún)可以知道,綠色表示排名上升,紅色表示排名下降。這里有一個(gè)判斷就搞定了!
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
4. 關(guān)鍵詞 將數據寫(xiě)入csv
寫(xiě)了一個(gè)案例,發(fā)現了兩個(gè)參考案例
import csv
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#參考一
def write_csv(self):
path = "aa.csv"
with open(path, 'a+') as f:
csv_write = csv.writer(f)
data_row = ["1", "2"]
<p>

csv_write.writerow(data_row)
# 參考二
def wcsv(self):
csvfile = open('csvtest.csv', 'w')
writer = csv.writer(csvfile)
writer.writerow(['keywords'])
data = [
('1', 'http://www.xiaoheiseo.com/', '小黑'),
('2', 'http://www.baidu.com/', '百度'),
('3', 'http://www.jd.com/', '京東')
]
writer.writerows(data)
csvfile.close()
</p>
5、查詢(xún)網(wǎng)站相關(guān)關(guān)鍵詞數據,寫(xiě)入excel表格
使用第三方庫, xlsxwriter
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
由于頁(yè)碼也是js生成的,所以沒(méi)有找到,所以自己輸入頁(yè)碼!
輸入查詢(xún)網(wǎng)站的URL格式為:抓取后數據存儲文件使用主域名!
附上完整代碼:
#5118網(wǎng)站關(guān)鍵詞數據獲取
import requests
from lxml import etree
from urllib.parse import unquote
import xlsxwriter
import time
import csv
class C5118(object):
def __init__(self,url,nums):
self.keyword_datas=[]
self.data_lists=[]
self.index_links_hrefs=[]
self.headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': UA,
'X-Requested-With': 'XMLHttpRequest',
}
self.post_url=url
self.file_name=url.split('.')[1]
self.pagenums=nums
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
<p>

#獲取數據
def get_data(self,pagenum):
url="https://www.5118.com/seo/baidupc"
params={
'isPager': 'true',
'viewtype': '2',
'days': '90',
'url': self.post_url,
'orderField': 'Rank',
'orderDirection': 'asc',
'pageIndex': pagenum, #頁(yè)碼
'catalogName': '',
}
response=requests.post(url,params=params,headers=self.headers)
time.sleep(1)
print(response.status_code)
doc=etree.HTML(response.content.decode('utf-8'))
keywords= doc.xpath('//tr[@class="list-row"]/td[1]/a/text()') #關(guān)鍵詞
print(keywords)
self.keyword_datas.extend(keywords)
ranks = doc.xpath('//tr[@class="list-row"]/td[2]/a') #排名
titles = doc.xpath('//tr[@class="list-row"]/td[5]/a/text()') #網(wǎng)頁(yè)標題
links=doc.xpath('//tr[@class="list-row"]/td[5]/a/@href') #網(wǎng)頁(yè)鏈接
index_links=doc.xpath('//tr[@class="list-row"]/td[7]/a/@href') #長(cháng)尾詞數量鏈接
self.index_links_hrefs.extend(index_links)
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
self.data_lists.append(data)
time.sleep(4)
return self.data_lists
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
def main(self):
for i in range(1,self.pagenums+1):
print(f'>>> 正在采集第{i}頁(yè)關(guān)鍵詞數據...')
self.get_data(i)
print("數據采集完成!")
self.write_keywords()
self.write_to_xlsx()
if __name__=="__main__":
url = "www.shejipi.com"
nums=100
spider=C5118(url,nums)
spider.main()
</p>
解決方案:基于K8S部署filebeat及l(fā)ogstash并輸出到j(luò )ava程序中
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-11-27 23:46
從 K8S 集群采集
容器日志并集中存儲。
溶液:
1、守護進(jìn)程集
運行文件節拍
作為守護進(jìn)程,Filebeat 會(huì )在 JAVA 程序中采集
通過(guò) logstash 發(fā)送的日志,然后由 JAVA 程序對其進(jìn)行處理并集中存儲。
2、邊車(chē)
每個(gè) POD 都增加了一個(gè)額外的 Filebeat 容器,Filebeat 讀取相應的日志,并通過(guò)日志共享將其發(fā)送到 JAVA 程序。
這兩種方法可以共存而不會(huì )發(fā)生沖突。DaemonSet 方法采集容器的標準輸出,如果有特殊要求,可以通過(guò) sidecar 方法自定義采集日志。
下面介紹了用于采集
容器日志的 daemonSet 方法的內容:
首先粘貼 K8S 部署的 yaml 文件:
# 創(chuàng )建賬戶(hù)
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager-role
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- events
- pods
verbs:
- get
- list
- watch
---
# 賬戶(hù)與角色綁定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: itsm-node-manager-role-binding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: itsm-node-manager-role
subjects:
- kind: ServiceAccount
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建logstash配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: logstash-config
namespace: kube-system
data:
logstash.yml: 'config.reload.automatic: true'
pipeline.conf: |-
input {
beats {
port => 5044
codec => json
}
}
filter {
}
output {
http {
http_method => "post"
format => "json"
# 此處配置程序的url路徑,java代碼會(huì )在下面貼出來(lái)。如果調用的是集群內部的程序,可以采用和filebeat一樣的域名方式
url => "http://192.168.0.195:8080/cont ... ot%3B
content_type => "application/json"
}
}
---
# 創(chuàng )建logstash
apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: kube-system
labels:
server: logstash-7.10.1
spec:
selector:
matchLabels:
<p>
k8s-app: logstash
template:
metadata:
creationTimestamp: null
labels:
k8s-app: logstash
name: logstash
spec:
containers:
- image: elastic/logstash:7.10.1
imagePullPolicy: IfNotPresent
name: logstash
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /usr/share/logstash/config/logstash.yml
name: logstash-config
readOnly: true
subPath: logstash.yml
- mountPath: /usr/share/logstash/pipeline/logstash.conf
name: logstash-config
readOnly: true
subPath: pipeline.conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 120
imagePullSecrets:
- name: dockerpull
volumes:
- configMap:
defaultMode: 420
name: logstash-config
name: logstash-config
---
# 創(chuàng )建logstash service
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: logstash
name: logstash
namespace: kube-system
spec:
type: ClusterIP
selector:
k8s-app: logstash
ports:
- port: 5044
protocol: TCP
targetPort: 5044
---
# 創(chuàng )建filebeat配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: filebeat-config
namespace: kube-system
data:
filebeat.yml: |-
filebeat.autodiscover:
providers:
- type: kubernetes
host: ${NODE_NAME}
hints.enabled: true
hints.default_config:
type: container
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
processors:
- add_cloud_metadata:
- add_host_metadata:
output.logstash:
hosts: ["logstash.kube-system.svc.cluster.local:5044"] # kubectl -n logs get svc
enabled: true
---
# 創(chuàng )建filebeat守護進(jìn)程
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: kube-system
labels:
server: filebeat-7.10.1
spec:
selector:
matchLabels:
name: filebeat
kubernetes.io/cluster-service: "true"
template:
metadata:
creationTimestamp: null
labels:
name: filebeat
kubernetes.io/cluster-service: "true"
spec:
containers:
- args:
- -c
- /etc/filebeat.yml
- -e
env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
image: elastic/filebeat:7.10.1
imagePullPolicy: IfNotPresent
name: filebeat
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /etc/filebeat.yml
name: config
readOnly: true
subPath: filebeat.yml
- mountPath: /usr/share/filebeat/data
name: data
- mountPath: /var/lib/docker/containers
name: varlibdockercontainers
readOnly: true
- mountPath: /var/log
name: varlog
readOnly: true
restartPolicy: Always
serviceAccount: itsm-node-manager
serviceAccountName: itsm-node-manager
volumes:
- configMap:
defaultMode: 384
name: filebeat-config
name: config
- hostPath:
path: /var/lib/docker/containers
type: ""
name: varlibdockercontainers
- hostPath:
path: /var/log
type: ""
name: varlog
- hostPath:
path: /opt/filebeat/data
type: DirectoryOrCreate
name: data
</p>
這是將多個(gè)部署信息放在一個(gè) YAML 文件中,用“---”分隔。
以下是 JAVA 代碼片段:
@Api(tags = "服務(wù)日志控制類(lèi)")
@Slf4j
@RestController
@RequestMapping("/containerLog")
public class ContainerLogController {
@Autowired
private ContainerLogService containerLogService;
@ApiOperation(value = "容器日志寫(xiě)入接口",produces = "application/json", response = String.class)
@PostMapping("insert")
public Result insert(HttpServletRequest httpServletRequest){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try {
br = httpServletRequest.getReader();
String str;
while ((str=br.readLine())!=null){
sb.append(str);
}
containerLogService.insert(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Result.newSuccess();
}
}
此時(shí),您可以獲取 logstash 發(fā)送的日志信息,并且容器日志均為 JSON 格式。
您可以在三個(gè)位置擴展以滿(mǎn)足您的需求:
1. 文件節拍采集
規則
2. 日志存儲過(guò)濾規則
3. 程序處理邏輯
最佳實(shí)踐:pytest文檔83 - 把收集的 yaml 文件轉 Item 用例并運行
前言
上一篇文章通過(guò)用例采集
掛鉤pytest_collect_file采集
YAML 文件,但只采集
用例,無(wú)法執行。
接下來(lái),詳細解釋如何將 yaml 文件的內容轉換為要執行的 Item 用例。
pytest_collect_file 采集
鉤子
準備 YAML 文件內容 test_login.yml
name: login case1<br />request:<br /> url: http://127.0.0.1:8000/api/v1/login/<br /> method: POST<br /> headers:<br /> Content-Type: application/json<br /> json:<br /> username: test<br /> password: 123456
首先將集合鉤子寫(xiě) conftest.py
def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return pytest.File.from_parent(parent, path=file_path)
如果采集
到 yaml 文件中,則返回 pytest。File.from_parent(父級,路徑=file_path),運行時(shí)將報告錯誤
============================================ ERRORS ============================================<br />_____________________________ ERROR collecting case/test_login.yml _____________________________<br />venv\lib\site-packages\_pytest\runner.py:339: in from_call<br /> result: Optional[TResult] = func()<br />venv\lib\site-packages\_pytest\runner.py:370: in <br /> call = CallInfo.from_call(lambda: list(collector.collect()), "collect")<br />venv\lib\site-packages\_pytest\nodes.py:536: in collect<br /> raise NotImplementedError("abstract")<br />E NotImplementedError: abstract<br />=================================== short test summary info ====================================<br />ERROR case/test_login.yml - NotImplementedError: abstract<br />!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!
該錯誤在 nodes.py 文件的 collect() 方法中報告,因此請在 nodes.py 中找到采集
器
class Collector(Node):<br /> """Collector instances create children through collect() and thus<br /> iteratively build a tree."""<br /><br /> class CollectError(Exception):<br /> """An error during collection, contains a custom message."""<br /><br /> def collect(self) -> Iterable[Union["Item", "Collector"]]:<br /> """Return a list of children (items and collectors) for this<br /> collection node."""<br /> raise NotImplementedError("abstract")
由于 collect() 方法
為空,它直接引發(fā)異常 NotImplementError(“abstract”),因此我們需要覆蓋 collect() 方法
YamlFile 重寫(xiě) collect()。
對應于 YamlFile 類(lèi),繼承 ytest。文件,它覆蓋 collect() 方法
class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield pytest.Item.from_parent(self, name=raw.get('name'), values=raw)
再次運行 pytest
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />item = <br /><br /> def pytest_runtest_call(item: Item) -> None:<br /> _update_current_test_var(item, "call")<br /> try:<br /> del sys.last_type<br /> del sys.last_value<br /> del sys.last_traceback<br /> except AttributeError:<br /> pass<br /> try:<br />> item.runtest()<br /><br />venv\lib\site-packages\_pytest\runner.py:167:<br />_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />self = <br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br />> raise NotImplementedError("runtest must be implemented by Item subclass")<br />E NotImplementedError: runtest must be implemented by Item subclass<br /><br />venv\lib\site-packages\_pytest\nodes.py:733: NotImplementedError
這次發(fā)生的錯誤在 runner.py 文件中報告,并且通過(guò)執行 runtest() 方法 NotImplementError(“runtest 必須由 Item 子類(lèi)實(shí)現”)引發(fā)的異常
?。?。
看到這里,就意味著(zhù)用例 Item 已經(jīng)生成,并且在執行時(shí),沒(méi)有定義執行 yaml 文件的方法,因此報告了一個(gè)錯誤
所以我在 nodes.py 中找到了 Item(Node) 類(lèi)
class Item(Node):<br /> """A basic test invocation item.<br /><br /> Note that for a single function there might be multiple test invocation items.<br /> """<br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br /> raise NotImplementedError("runtest must be implemented by Item subclass")
接下來(lái),您需要重寫(xiě) Item 中的運行測試以執行用例
重寫(xiě)項目的運行測試
您最終看到執行yaml文件的簡(jiǎn)短版本的界面用例 conftest.py 如下
import pytest<br />import requests<br />import yaml<br />from pathlib import Path<br /><br />def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return YamlFile.from_parent(parent, path=file_path)<br /><br />class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield YamlTest.from_parent(self, name=raw.get('name'), values=raw)<br /><br />class YamlTest(pytest.Item):<br /> def __init__(self, name, parent, values):<br /> super(YamlTest, self).__init__(name, parent)<br /> self.name = name<br /> self.values = values<br /> self.s = requests.session()<br /><br /> def runtest(self) -> None:<br /> """運行用例"""<br /> request_data = self.values["request"]<br /> response = self.s.request(**request_data)<br /> print("\n", response.text)
輸入pytest,您可以看到yaml文件作為用例執行 查看全部
解決方案:基于K8S部署filebeat及l(fā)ogstash并輸出到j(luò )ava程序中
從 K8S 集群采集
容器日志并集中存儲。
溶液:
1、守護進(jìn)程集
運行文件節拍
作為守護進(jìn)程,Filebeat 會(huì )在 JAVA 程序中采集
通過(guò) logstash 發(fā)送的日志,然后由 JAVA 程序對其進(jìn)行處理并集中存儲。
2、邊車(chē)
每個(gè) POD 都增加了一個(gè)額外的 Filebeat 容器,Filebeat 讀取相應的日志,并通過(guò)日志共享將其發(fā)送到 JAVA 程序。
這兩種方法可以共存而不會(huì )發(fā)生沖突。DaemonSet 方法采集容器的標準輸出,如果有特殊要求,可以通過(guò) sidecar 方法自定義采集日志。
下面介紹了用于采集
容器日志的 daemonSet 方法的內容:
首先粘貼 K8S 部署的 yaml 文件:
# 創(chuàng )建賬戶(hù)
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager-role
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- events
- pods
verbs:
- get
- list
- watch
---
# 賬戶(hù)與角色綁定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: itsm-node-manager-role-binding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: itsm-node-manager-role
subjects:
- kind: ServiceAccount
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建logstash配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: logstash-config
namespace: kube-system
data:
logstash.yml: 'config.reload.automatic: true'
pipeline.conf: |-
input {
beats {
port => 5044
codec => json
}
}
filter {
}
output {
http {
http_method => "post"
format => "json"
# 此處配置程序的url路徑,java代碼會(huì )在下面貼出來(lái)。如果調用的是集群內部的程序,可以采用和filebeat一樣的域名方式
url => "http://192.168.0.195:8080/cont ... ot%3B
content_type => "application/json"
}
}
---
# 創(chuàng )建logstash
apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: kube-system
labels:
server: logstash-7.10.1
spec:
selector:
matchLabels:
<p>

k8s-app: logstash
template:
metadata:
creationTimestamp: null
labels:
k8s-app: logstash
name: logstash
spec:
containers:
- image: elastic/logstash:7.10.1
imagePullPolicy: IfNotPresent
name: logstash
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /usr/share/logstash/config/logstash.yml
name: logstash-config
readOnly: true
subPath: logstash.yml
- mountPath: /usr/share/logstash/pipeline/logstash.conf
name: logstash-config
readOnly: true
subPath: pipeline.conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 120
imagePullSecrets:
- name: dockerpull
volumes:
- configMap:
defaultMode: 420
name: logstash-config
name: logstash-config
---
# 創(chuàng )建logstash service
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: logstash
name: logstash
namespace: kube-system
spec:
type: ClusterIP
selector:
k8s-app: logstash
ports:
- port: 5044
protocol: TCP
targetPort: 5044
---
# 創(chuàng )建filebeat配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: filebeat-config
namespace: kube-system
data:
filebeat.yml: |-
filebeat.autodiscover:
providers:
- type: kubernetes
host: ${NODE_NAME}
hints.enabled: true
hints.default_config:
type: container
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
processors:
- add_cloud_metadata:
- add_host_metadata:
output.logstash:
hosts: ["logstash.kube-system.svc.cluster.local:5044"] # kubectl -n logs get svc
enabled: true
---
# 創(chuàng )建filebeat守護進(jìn)程
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: kube-system
labels:
server: filebeat-7.10.1
spec:
selector:
matchLabels:
name: filebeat
kubernetes.io/cluster-service: "true"
template:
metadata:
creationTimestamp: null

labels:
name: filebeat
kubernetes.io/cluster-service: "true"
spec:
containers:
- args:
- -c
- /etc/filebeat.yml
- -e
env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
image: elastic/filebeat:7.10.1
imagePullPolicy: IfNotPresent
name: filebeat
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /etc/filebeat.yml
name: config
readOnly: true
subPath: filebeat.yml
- mountPath: /usr/share/filebeat/data
name: data
- mountPath: /var/lib/docker/containers
name: varlibdockercontainers
readOnly: true
- mountPath: /var/log
name: varlog
readOnly: true
restartPolicy: Always
serviceAccount: itsm-node-manager
serviceAccountName: itsm-node-manager
volumes:
- configMap:
defaultMode: 384
name: filebeat-config
name: config
- hostPath:
path: /var/lib/docker/containers
type: ""
name: varlibdockercontainers
- hostPath:
path: /var/log
type: ""
name: varlog
- hostPath:
path: /opt/filebeat/data
type: DirectoryOrCreate
name: data
</p>
這是將多個(gè)部署信息放在一個(gè) YAML 文件中,用“---”分隔。
以下是 JAVA 代碼片段:
@Api(tags = "服務(wù)日志控制類(lèi)")
@Slf4j
@RestController
@RequestMapping("/containerLog")
public class ContainerLogController {
@Autowired
private ContainerLogService containerLogService;
@ApiOperation(value = "容器日志寫(xiě)入接口",produces = "application/json", response = String.class)
@PostMapping("insert")
public Result insert(HttpServletRequest httpServletRequest){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try {
br = httpServletRequest.getReader();
String str;
while ((str=br.readLine())!=null){
sb.append(str);
}
containerLogService.insert(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Result.newSuccess();
}
}
此時(shí),您可以獲取 logstash 發(fā)送的日志信息,并且容器日志均為 JSON 格式。
您可以在三個(gè)位置擴展以滿(mǎn)足您的需求:
1. 文件節拍采集
規則
2. 日志存儲過(guò)濾規則
3. 程序處理邏輯
最佳實(shí)踐:pytest文檔83 - 把收集的 yaml 文件轉 Item 用例并運行
前言
上一篇文章通過(guò)用例采集
掛鉤pytest_collect_file采集
YAML 文件,但只采集
用例,無(wú)法執行。
接下來(lái),詳細解釋如何將 yaml 文件的內容轉換為要執行的 Item 用例。
pytest_collect_file 采集
鉤子
準備 YAML 文件內容 test_login.yml
name: login case1<br />request:<br /> url: http://127.0.0.1:8000/api/v1/login/<br /> method: POST<br /> headers:<br /> Content-Type: application/json<br /> json:<br /> username: test<br /> password: 123456
首先將集合鉤子寫(xiě) conftest.py
def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return pytest.File.from_parent(parent, path=file_path)
如果采集
到 yaml 文件中,則返回 pytest。File.from_parent(父級,路徑=file_path),運行時(shí)將報告錯誤
============================================ ERRORS ============================================<br />_____________________________ ERROR collecting case/test_login.yml _____________________________<br />venv\lib\site-packages\_pytest\runner.py:339: in from_call<br /> result: Optional[TResult] = func()<br />venv\lib\site-packages\_pytest\runner.py:370: in <br /> call = CallInfo.from_call(lambda: list(collector.collect()), "collect")<br />venv\lib\site-packages\_pytest\nodes.py:536: in collect<br /> raise NotImplementedError("abstract")<br />E NotImplementedError: abstract<br />=================================== short test summary info ====================================<br />ERROR case/test_login.yml - NotImplementedError: abstract<br />!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!

該錯誤在 nodes.py 文件的 collect() 方法中報告,因此請在 nodes.py 中找到采集
器
class Collector(Node):<br /> """Collector instances create children through collect() and thus<br /> iteratively build a tree."""<br /><br /> class CollectError(Exception):<br /> """An error during collection, contains a custom message."""<br /><br /> def collect(self) -> Iterable[Union["Item", "Collector"]]:<br /> """Return a list of children (items and collectors) for this<br /> collection node."""<br /> raise NotImplementedError("abstract")
由于 collect() 方法
為空,它直接引發(fā)異常 NotImplementError(“abstract”),因此我們需要覆蓋 collect() 方法
YamlFile 重寫(xiě) collect()。
對應于 YamlFile 類(lèi),繼承 ytest。文件,它覆蓋 collect() 方法
class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield pytest.Item.from_parent(self, name=raw.get('name'), values=raw)
再次運行 pytest
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />item = <br /><br /> def pytest_runtest_call(item: Item) -> None:<br /> _update_current_test_var(item, "call")<br /> try:<br /> del sys.last_type<br /> del sys.last_value<br /> del sys.last_traceback<br /> except AttributeError:<br /> pass<br /> try:<br />> item.runtest()<br /><br />venv\lib\site-packages\_pytest\runner.py:167:<br />_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />self = <br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br />> raise NotImplementedError("runtest must be implemented by Item subclass")<br />E NotImplementedError: runtest must be implemented by Item subclass<br /><br />venv\lib\site-packages\_pytest\nodes.py:733: NotImplementedError
這次發(fā)生的錯誤在 runner.py 文件中報告,并且通過(guò)執行 runtest() 方法 NotImplementError(“runtest 必須由 Item 子類(lèi)實(shí)現”)引發(fā)的異常

?。?。
看到這里,就意味著(zhù)用例 Item 已經(jīng)生成,并且在執行時(shí),沒(méi)有定義執行 yaml 文件的方法,因此報告了一個(gè)錯誤
所以我在 nodes.py 中找到了 Item(Node) 類(lèi)
class Item(Node):<br /> """A basic test invocation item.<br /><br /> Note that for a single function there might be multiple test invocation items.<br /> """<br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br /> raise NotImplementedError("runtest must be implemented by Item subclass")
接下來(lái),您需要重寫(xiě) Item 中的運行測試以執行用例
重寫(xiě)項目的運行測試
您最終看到執行yaml文件的簡(jiǎn)短版本的界面用例 conftest.py 如下
import pytest<br />import requests<br />import yaml<br />from pathlib import Path<br /><br />def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return YamlFile.from_parent(parent, path=file_path)<br /><br />class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield YamlTest.from_parent(self, name=raw.get('name'), values=raw)<br /><br />class YamlTest(pytest.Item):<br /> def __init__(self, name, parent, values):<br /> super(YamlTest, self).__init__(name, parent)<br /> self.name = name<br /> self.values = values<br /> self.s = requests.session()<br /><br /> def runtest(self) -> None:<br /> """運行用例"""<br /> request_data = self.values["request"]<br /> response = self.s.request(**request_data)<br /> print("\n", response.text)
輸入pytest,您可以看到yaml文件作為用例執行
分享文章:搜狐號文章圖片解密還原 含調用例子
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 137 次瀏覽 ? 2022-11-27 19:58
任何參與該網(wǎng)站的人都應該采集
搜狐文章,但最近搜狐文章的圖片已被加密。當你發(fā)送HTTP請求后想直接截取搜狐文章的正文,或者當你使用抓取軟件時(shí),發(fā)現搜狐文章的IMG圖片路徑是加密的???
仔細看看搜狐文章的文字 IMG 標簽路徑是加密的,但通過(guò)瀏覽器訪(fǎng)問(wèn)很正常,盲猜 JS 在起作用。
F12直接從褲襠,斷點(diǎn)調整。一目了然,你可以看到它是AES加密,你知道加密方法。直接調用 CryptoJS 庫進(jìn)行解密!
CryptoJS 加密模塊 AES ECB pkcs7 密鑰是
js 調用示例:需要引用 CryptoJS 加密庫
var?key?=?CryptoJS.enc.Utf8.parse("www.sohu.com6666");
<p>
function?AES_Encrypt(word)?{
????var?srcs?=?CryptoJS.enc.Utf8.parse(word);
????var?encrypted?=?CryptoJS.AES.encrypt(srcs,?key,?{
????????mode:?CryptoJS.mode</p>
干貨教程:一分鐘教你玩轉手機回收小程序,源碼+教程免費分享
在我們現在的生活中,最離不開(kāi)的就是手機了。隨著(zhù)智能手機的不斷普及,人們更換手機的頻率也在不斷加快,從而帶動(dòng)了二手手機回收市場(chǎng)的快速發(fā)展。在二手手機行業(yè)發(fā)展的今天,也誕生了很多手機回收小程序。今天我們就來(lái)介紹一下手機回收小程序的功能。
手機回收小程序功能介紹:
1.免費估價(jià)
用戶(hù)可以在小程序中完成一系列系統問(wèn)題,對手機進(jìn)行智能估價(jià),供用戶(hù)參考和比較。
2.品類(lèi)劃分
除了手機,該平臺還將涵蓋筆記本、平板電腦、攝影器材等各類(lèi)數碼電子產(chǎn)品。種類(lèi)型號齊全,滿(mǎn)足更多用戶(hù)的需求。
3.以舊換新
平臺通過(guò)對舊機進(jìn)行估價(jià)回收,讓用戶(hù)在平臺購買(mǎi)新機時(shí)可以抵扣,讓用戶(hù)獲得更大的優(yōu)惠。
4.在線(xiàn)回收
通過(guò)在線(xiàn)估值測試后,實(shí)現快速恢復,讓用戶(hù)更快回款。
五、行業(yè)資訊
平臺可以及時(shí)更新數字行業(yè)的動(dòng)態(tài)和新聞,讓用戶(hù)更容易了解最新的數字資訊。
目前,二手手機行業(yè)的市場(chǎng)規模并不遜色于二手車(chē)、二手房。而相比之下,二手手機市場(chǎng)需求更為剛性,交易更為頻繁。對于手機回收行業(yè)來(lái)說(shuō),小程序將擁有更廣闊的市場(chǎng)空間。
今天分享的資源包括手機數碼回收小程序源碼+零基礎新手教程。內容非常豐富,包括服務(wù)器和域名的配置、寶塔的安裝、小程序的安裝和啟動(dòng)等等,真正教你從零開(kāi)始搭建。并正式推出了自己的小程序。
免費領(lǐng)取手機數碼回收小程序源碼流程:
1. 點(diǎn)贊+關(guān)注“解密小程序”
2.私信回復關(guān)鍵詞:源碼(可以免費領(lǐng)?。?br />
如果資源失效,別著(zhù)急,請聯(lián)系小編補發(fā)!
感謝您的關(guān)注和支持。歡迎大家分享轉發(fā),讓更多需要的朋友看到??。未來(lái)我們也會(huì )努力分享更多優(yōu)質(zhì)的源碼、教程等資料。希望大家繼續關(guān)注!
《60分鐘教你:從零開(kāi)始搭建一個(gè)完整的小程序》
第一課:兩種方式教你注冊小程序賬號
第二課:如何為小程序選擇合適的服務(wù)器和域名?
第三課:十分鐘教你快速搭建服務(wù)器環(huán)境
第四課:一鍵輕松搭建小程序第三方系統——微引擎
第五課:教你快速安裝小程序應用
第六課:十分鐘教你正式上線(xiàn)微信小程序 查看全部
分享文章:搜狐號文章圖片解密還原 含調用例子
任何參與該網(wǎng)站的人都應該采集
搜狐文章,但最近搜狐文章的圖片已被加密。當你發(fā)送HTTP請求后想直接截取搜狐文章的正文,或者當你使用抓取軟件時(shí),發(fā)現搜狐文章的IMG圖片路徑是加密的???
仔細看看搜狐文章的文字 IMG 標簽路徑是加密的,但通過(guò)瀏覽器訪(fǎng)問(wèn)很正常,盲猜 JS 在起作用。
F12直接從褲襠,斷點(diǎn)調整。一目了然,你可以看到它是AES加密,你知道加密方法。直接調用 CryptoJS 庫進(jìn)行解密!

CryptoJS 加密模塊 AES ECB pkcs7 密鑰是
js 調用示例:需要引用 CryptoJS 加密庫
var?key?=?CryptoJS.enc.Utf8.parse("www.sohu.com6666");
<p>

function?AES_Encrypt(word)?{
????var?srcs?=?CryptoJS.enc.Utf8.parse(word);
????var?encrypted?=?CryptoJS.AES.encrypt(srcs,?key,?{
????????mode:?CryptoJS.mode</p>
干貨教程:一分鐘教你玩轉手機回收小程序,源碼+教程免費分享
在我們現在的生活中,最離不開(kāi)的就是手機了。隨著(zhù)智能手機的不斷普及,人們更換手機的頻率也在不斷加快,從而帶動(dòng)了二手手機回收市場(chǎng)的快速發(fā)展。在二手手機行業(yè)發(fā)展的今天,也誕生了很多手機回收小程序。今天我們就來(lái)介紹一下手機回收小程序的功能。
手機回收小程序功能介紹:
1.免費估價(jià)
用戶(hù)可以在小程序中完成一系列系統問(wèn)題,對手機進(jìn)行智能估價(jià),供用戶(hù)參考和比較。
2.品類(lèi)劃分
除了手機,該平臺還將涵蓋筆記本、平板電腦、攝影器材等各類(lèi)數碼電子產(chǎn)品。種類(lèi)型號齊全,滿(mǎn)足更多用戶(hù)的需求。
3.以舊換新
平臺通過(guò)對舊機進(jìn)行估價(jià)回收,讓用戶(hù)在平臺購買(mǎi)新機時(shí)可以抵扣,讓用戶(hù)獲得更大的優(yōu)惠。

4.在線(xiàn)回收
通過(guò)在線(xiàn)估值測試后,實(shí)現快速恢復,讓用戶(hù)更快回款。
五、行業(yè)資訊
平臺可以及時(shí)更新數字行業(yè)的動(dòng)態(tài)和新聞,讓用戶(hù)更容易了解最新的數字資訊。
目前,二手手機行業(yè)的市場(chǎng)規模并不遜色于二手車(chē)、二手房。而相比之下,二手手機市場(chǎng)需求更為剛性,交易更為頻繁。對于手機回收行業(yè)來(lái)說(shuō),小程序將擁有更廣闊的市場(chǎng)空間。
今天分享的資源包括手機數碼回收小程序源碼+零基礎新手教程。內容非常豐富,包括服務(wù)器和域名的配置、寶塔的安裝、小程序的安裝和啟動(dòng)等等,真正教你從零開(kāi)始搭建。并正式推出了自己的小程序。
免費領(lǐng)取手機數碼回收小程序源碼流程:
1. 點(diǎn)贊+關(guān)注“解密小程序”
2.私信回復關(guān)鍵詞:源碼(可以免費領(lǐng)?。?br />

如果資源失效,別著(zhù)急,請聯(lián)系小編補發(fā)!
感謝您的關(guān)注和支持。歡迎大家分享轉發(fā),讓更多需要的朋友看到??。未來(lái)我們也會(huì )努力分享更多優(yōu)質(zhì)的源碼、教程等資料。希望大家繼續關(guān)注!
《60分鐘教你:從零開(kāi)始搭建一個(gè)完整的小程序》
第一課:兩種方式教你注冊小程序賬號
第二課:如何為小程序選擇合適的服務(wù)器和域名?
第三課:十分鐘教你快速搭建服務(wù)器環(huán)境
第四課:一鍵輕松搭建小程序第三方系統——微引擎
第五課:教你快速安裝小程序應用
第六課:十分鐘教你正式上線(xiàn)微信小程序
測評:發(fā)布一個(gè)文章采集器大家試試,來(lái)者有分。
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 129 次瀏覽 ? 2022-11-26 03:17
免費PHPCMS采集規則文章采集器采集百萬(wàn)數據
直接在本地電腦上運行該工具,(為什么要使用本地采集工具,因為在本地電腦上運行采集工具不會(huì )對服務(wù)器造成任何影響,最大限度地發(fā)揮服務(wù)器的性能,讓網(wǎng)站打開(kāi)速度更快,并且允許搜索引擎的抓取速度更快!使用SEO工具實(shí)現...
【站群必備】自動(dòng)采集文章和偽原創(chuàng )文章后自動(dòng)發(fā)布文章-一站式服務(wù)
很多人在做網(wǎng)站群的時(shí)候,往往要么請人幫忙寫(xiě)... 自動(dòng)采集偽原創(chuàng )文章后自動(dòng)發(fā)布文章的集成在線(xiàn)采集服務(wù)。簡(jiǎn)單易操作的面板,最快3分鐘即可啟動(dòng),可大幅提升。規模管理站群,每天可自動(dòng)發(fā)布大量偽原創(chuàng )文章,并可選擇...
50行代碼教你打造公眾號文章采集器
Alfred的女票是數據科學(xué)領(lǐng)域的新媒體運營(yíng)官(沒(méi)錯,Alfred是程序員,Alfred有女票),每天閱讀大量行業(yè)相關(guān)文章,把握行業(yè)動(dòng)態(tài),選擇和生產(chǎn)相關(guān)...
【W(wǎng)ordpress】Wordpress插件自動(dòng)采集
發(fā)布工具
安裝好wordpress之后,就得開(kāi)始發(fā)布文章了。由于之前的文章散落在各個(gè)平臺上,要一篇一篇的復制,著(zhù)實(shí)費時(shí)費力。所以,想要一勞永逸的解決這個(gè)問(wèn)題,就必須要用到今天介紹的采集工具了。插件安裝搜索:Fat Rat Coolect ...
免費PBootCMS采集支持聚合文章采集插件
Q:如何安裝免費的PBOOT CMS采集插件?站長(cháng)必備PBoot采集工具答:直接下載到本地電腦,雙擊直接運行!...答案:每天可采集百萬(wàn)條數據,支持單列采集發(fā)布,支持多列采集發(fā)布。Q:免費PBOOTCMS插件合集
技術(shù)文章:英文網(wǎng)站文章采集,英文文章采集批量翻譯
英文網(wǎng)站文章采集
是我們常用的材料采集
方法,網(wǎng)站翻譯我們可以通過(guò)頁(yè)面瀏覽器自帶的翻譯進(jìn)行,但是如何對我們采集
的文章進(jìn)行本地批量翻譯,您需要使用我們的批量翻譯插件。
英文網(wǎng)站指定采集,
只需要進(jìn)入我們的目標網(wǎng)站,簡(jiǎn)單的操作不需要切換IP即可進(jìn)行,無(wú)論是英文、俄文、法文、日文、韓文等大小語(yǔ)種網(wǎng)站都可以進(jìn)行視覺(jué)選擇和采集操作,對于采集的文章,用自己的批量翻譯,可以在發(fā)布到我們的網(wǎng)站或本地的條件下保留原創(chuàng )
語(yǔ)言標簽和格式。
英文網(wǎng)站的推廣也離不開(kāi)SEO,除了素材的采集
,網(wǎng)站內容的日常及時(shí)更新,還需要進(jìn)行相關(guān)的SEO優(yōu)化。通過(guò)關(guān)鍵詞挖掘,獲取流行的實(shí)時(shí)下拉和長(cháng)尾關(guān)鍵詞及相關(guān)詞,然后通過(guò)全網(wǎng)匹配采集來(lái)采集這些長(cháng)尾詞,得到高質(zhì)量的爆款文章和熱點(diǎn)文章。
當我們想要增加頁(yè)面瀏覽量時(shí),最好定位競爭較低的關(guān)鍵詞——使它們更容易排名,我們將在 SERP 中看到更快的結果??梢詭椭覀冋业揭ㄎ坏年P(guān)鍵字。我們輸入關(guān)鍵字,該工具將顯示要定位的潛在關(guān)鍵字列表。
我們可以按關(guān)鍵字難度,國家,數量(每月訪(fǎng)問(wèn)者數量)等進(jìn)行排序。如果我們使用此工具查找難度分數低的長(cháng)尾關(guān)鍵字,我們將能夠創(chuàng )建一個(gè)關(guān)鍵字列表來(lái)定位,我們可以自己使用或提供給我們的作家團隊。
想象一下這樣的場(chǎng)景:我們查看市場(chǎng)上的潛在網(wǎng)站,但我們想知道該網(wǎng)站是否有潛力在花錢(qián)之前快速(并且非常容易)改進(jìn)。通常,我們必須做出估計并相信網(wǎng)站賣(mài)家對流量、收入、反向鏈接和關(guān)鍵字的說(shuō)法;但是,使用英語(yǔ)網(wǎng)站抓取等工具可以讓我們避免任何尷尬和代價(jià)高昂的錯誤。
我們可能會(huì )在軟件中運行網(wǎng)站的域名,并接收數據和有價(jià)值信息的列表。例如,我們可以看到他們排名的關(guān)鍵字(更重要的是,他們沒(méi)有排名)以及他們與競爭對手的匹配程度。
如果我們遇到未使用的關(guān)鍵字,但競爭對手確實(shí)如此,我們可以看到使用英語(yǔ)網(wǎng)站抓取工具創(chuàng )建內容并超越它們是多么容易。英文網(wǎng)站抓取工具為我們輸入的任何搜索詞提供詳細數據,告訴我們與排名靠前的搜索詞競爭是多么容易。
我們可能會(huì )遇到的另一種情況是找到一個(gè)在搜索結果中表現良好但沒(méi)有良好內容或大量反向鏈接的網(wǎng)站。當這種情況發(fā)生時(shí),這是一個(gè)好兆頭,因為我們可以創(chuàng )建更好的內容,添加反向鏈接并獲得更好的排名。
英文網(wǎng)站集合有一些價(jià)格計劃,但即使是最便宜的計劃也允許我們跟蹤 100 個(gè)關(guān)鍵字。跟蹤多個(gè)關(guān)鍵字意味著(zhù)我們可以訪(fǎng)問(wèn)數據,并可以查看每個(gè)關(guān)鍵字的可視化屏幕和網(wǎng)站性能報告。我們可以在移動(dòng)和桌面結果之間切換,并查看所有領(lǐng)先搜索引擎的日?;顒?dòng)。 查看全部
測評:發(fā)布一個(gè)文章采集器大家試試,來(lái)者有分。
免費PHPCMS采集規則文章采集器采集百萬(wàn)數據
直接在本地電腦上運行該工具,(為什么要使用本地采集工具,因為在本地電腦上運行采集工具不會(huì )對服務(wù)器造成任何影響,最大限度地發(fā)揮服務(wù)器的性能,讓網(wǎng)站打開(kāi)速度更快,并且允許搜索引擎的抓取速度更快!使用SEO工具實(shí)現...
【站群必備】自動(dòng)采集文章和偽原創(chuàng )文章后自動(dòng)發(fā)布文章-一站式服務(wù)

很多人在做網(wǎng)站群的時(shí)候,往往要么請人幫忙寫(xiě)... 自動(dòng)采集偽原創(chuàng )文章后自動(dòng)發(fā)布文章的集成在線(xiàn)采集服務(wù)。簡(jiǎn)單易操作的面板,最快3分鐘即可啟動(dòng),可大幅提升。規模管理站群,每天可自動(dòng)發(fā)布大量偽原創(chuàng )文章,并可選擇...
50行代碼教你打造公眾號文章采集器
Alfred的女票是數據科學(xué)領(lǐng)域的新媒體運營(yíng)官(沒(méi)錯,Alfred是程序員,Alfred有女票),每天閱讀大量行業(yè)相關(guān)文章,把握行業(yè)動(dòng)態(tài),選擇和生產(chǎn)相關(guān)...
【W(wǎng)ordpress】Wordpress插件自動(dòng)采集
發(fā)布工具

安裝好wordpress之后,就得開(kāi)始發(fā)布文章了。由于之前的文章散落在各個(gè)平臺上,要一篇一篇的復制,著(zhù)實(shí)費時(shí)費力。所以,想要一勞永逸的解決這個(gè)問(wèn)題,就必須要用到今天介紹的采集工具了。插件安裝搜索:Fat Rat Coolect ...
免費PBootCMS采集支持聚合文章采集插件
Q:如何安裝免費的PBOOT CMS采集插件?站長(cháng)必備PBoot采集工具答:直接下載到本地電腦,雙擊直接運行!...答案:每天可采集百萬(wàn)條數據,支持單列采集發(fā)布,支持多列采集發(fā)布。Q:免費PBOOTCMS插件合集
技術(shù)文章:英文網(wǎng)站文章采集,英文文章采集批量翻譯
英文網(wǎng)站文章采集
是我們常用的材料采集
方法,網(wǎng)站翻譯我們可以通過(guò)頁(yè)面瀏覽器自帶的翻譯進(jìn)行,但是如何對我們采集
的文章進(jìn)行本地批量翻譯,您需要使用我們的批量翻譯插件。
英文網(wǎng)站指定采集,
只需要進(jìn)入我們的目標網(wǎng)站,簡(jiǎn)單的操作不需要切換IP即可進(jìn)行,無(wú)論是英文、俄文、法文、日文、韓文等大小語(yǔ)種網(wǎng)站都可以進(jìn)行視覺(jué)選擇和采集操作,對于采集的文章,用自己的批量翻譯,可以在發(fā)布到我們的網(wǎng)站或本地的條件下保留原創(chuàng )
語(yǔ)言標簽和格式。
英文網(wǎng)站的推廣也離不開(kāi)SEO,除了素材的采集
,網(wǎng)站內容的日常及時(shí)更新,還需要進(jìn)行相關(guān)的SEO優(yōu)化。通過(guò)關(guān)鍵詞挖掘,獲取流行的實(shí)時(shí)下拉和長(cháng)尾關(guān)鍵詞及相關(guān)詞,然后通過(guò)全網(wǎng)匹配采集來(lái)采集這些長(cháng)尾詞,得到高質(zhì)量的爆款文章和熱點(diǎn)文章。

當我們想要增加頁(yè)面瀏覽量時(shí),最好定位競爭較低的關(guān)鍵詞——使它們更容易排名,我們將在 SERP 中看到更快的結果??梢詭椭覀冋业揭ㄎ坏年P(guān)鍵字。我們輸入關(guān)鍵字,該工具將顯示要定位的潛在關(guān)鍵字列表。
我們可以按關(guān)鍵字難度,國家,數量(每月訪(fǎng)問(wèn)者數量)等進(jìn)行排序。如果我們使用此工具查找難度分數低的長(cháng)尾關(guān)鍵字,我們將能夠創(chuàng )建一個(gè)關(guān)鍵字列表來(lái)定位,我們可以自己使用或提供給我們的作家團隊。
想象一下這樣的場(chǎng)景:我們查看市場(chǎng)上的潛在網(wǎng)站,但我們想知道該網(wǎng)站是否有潛力在花錢(qián)之前快速(并且非常容易)改進(jìn)。通常,我們必須做出估計并相信網(wǎng)站賣(mài)家對流量、收入、反向鏈接和關(guān)鍵字的說(shuō)法;但是,使用英語(yǔ)網(wǎng)站抓取等工具可以讓我們避免任何尷尬和代價(jià)高昂的錯誤。

我們可能會(huì )在軟件中運行網(wǎng)站的域名,并接收數據和有價(jià)值信息的列表。例如,我們可以看到他們排名的關(guān)鍵字(更重要的是,他們沒(méi)有排名)以及他們與競爭對手的匹配程度。
如果我們遇到未使用的關(guān)鍵字,但競爭對手確實(shí)如此,我們可以看到使用英語(yǔ)網(wǎng)站抓取工具創(chuàng )建內容并超越它們是多么容易。英文網(wǎng)站抓取工具為我們輸入的任何搜索詞提供詳細數據,告訴我們與排名靠前的搜索詞競爭是多么容易。
我們可能會(huì )遇到的另一種情況是找到一個(gè)在搜索結果中表現良好但沒(méi)有良好內容或大量反向鏈接的網(wǎng)站。當這種情況發(fā)生時(shí),這是一個(gè)好兆頭,因為我們可以創(chuàng )建更好的內容,添加反向鏈接并獲得更好的排名。
英文網(wǎng)站集合有一些價(jià)格計劃,但即使是最便宜的計劃也允許我們跟蹤 100 個(gè)關(guān)鍵字。跟蹤多個(gè)關(guān)鍵字意味著(zhù)我們可以訪(fǎng)問(wèn)數據,并可以查看每個(gè)關(guān)鍵字的可視化屏幕和網(wǎng)站性能報告。我們可以在移動(dòng)和桌面結果之間切換,并查看所有領(lǐng)先搜索引擎的日?;顒?dòng)。
解決方案:微服務(wù)遠程調用組件Feign的使用詳解
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-11-25 18:38
一、總結
我們知道目前最火、技術(shù)含量最高的技術(shù)就是SpringCloud微服務(wù),那么今天一哥就帶大家了解一下微服務(wù)的核心組件之一,Feign的基本使用及其工作機制。
二、Feign簡(jiǎn)介 一、概念
在學(xué)習如何使用Feign之前,我們先來(lái)了解一下什么是Feign。
Feign 是 Netflix 開(kāi)發(fā)的聲明式(目前由 Spring 維護)和模板化的 HTTP 客戶(hù)端。Feign可以幫助我們更快速優(yōu)雅的調用HTTP Api。
簡(jiǎn)單來(lái)說(shuō),Feign是一個(gè)遠程服務(wù)調用的框架/工具,可以讓開(kāi)發(fā)者以更低耦合、更少代碼、更快、更兼容的方式進(jìn)行遠程服務(wù)調用。
2.功能
了解了這些基本概念之后,接下來(lái)小編就帶大家看看Feign組件是如何實(shí)現遠程接口調用的。話(huà)不多說(shuō),我們直接上代碼。
三、服務(wù)提供者 1、添加依賴(lài)
首先我們在父POM文件中添加核心依賴(lài),如下:
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba-dependencies.version}
pom
import
然后在子POM文件中添加依賴(lài)如下:
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.配置文件
在 application.yml 文件中添加如下配置:
server:
port: 8090
spring:
application:
name: nacos-feign-example
cloud:
nacos:
discovery:
server-addr: 112.74.42.138:8848
3、創(chuàng )業(yè)班
項目的啟動(dòng)類(lèi)代碼如下:
@SpringBootApplication
public class NetflixFeignProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NetflixFeignProviderApplication.class, args);
}
}
4.控制層
我們可以寫(xiě)一個(gè)Controller控制器,定義web界面如下。
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
/**
* 模擬主鍵自增
*/
private AtomicInteger pk = new AtomicInteger();
<p>
@PostMappingpublic User save(@RequestBody User user) {
user.setUid(pk.incrementAndGet());
return user;
}
/**
* @param uid
* @return
*/@GetMapping("/{uid}")
public User user(@PathVariable("uid") int uid) {
return User.builder()
.uid(uid)
.username("admin")
.password("123456")
.build();
}
@GetMapping("/users")
public List users(@RequestHeader("token") String token) {
// 模擬從數據中獲取數據
ArrayList users = new ArrayList();
for (int i = 1; i 查看全部
解決方案:微服務(wù)遠程調用組件Feign的使用詳解
一、總結
我們知道目前最火、技術(shù)含量最高的技術(shù)就是SpringCloud微服務(wù),那么今天一哥就帶大家了解一下微服務(wù)的核心組件之一,Feign的基本使用及其工作機制。
二、Feign簡(jiǎn)介 一、概念
在學(xué)習如何使用Feign之前,我們先來(lái)了解一下什么是Feign。
Feign 是 Netflix 開(kāi)發(fā)的聲明式(目前由 Spring 維護)和模板化的 HTTP 客戶(hù)端。Feign可以幫助我們更快速優(yōu)雅的調用HTTP Api。
簡(jiǎn)單來(lái)說(shuō),Feign是一個(gè)遠程服務(wù)調用的框架/工具,可以讓開(kāi)發(fā)者以更低耦合、更少代碼、更快、更兼容的方式進(jìn)行遠程服務(wù)調用。
2.功能
了解了這些基本概念之后,接下來(lái)小編就帶大家看看Feign組件是如何實(shí)現遠程接口調用的。話(huà)不多說(shuō),我們直接上代碼。
三、服務(wù)提供者 1、添加依賴(lài)
首先我們在父POM文件中添加核心依賴(lài),如下:
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba-dependencies.version}
pom
import
然后在子POM文件中添加依賴(lài)如下:
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.配置文件
在 application.yml 文件中添加如下配置:
server:
port: 8090
spring:
application:
name: nacos-feign-example
cloud:
nacos:
discovery:
server-addr: 112.74.42.138:8848
3、創(chuàng )業(yè)班
項目的啟動(dòng)類(lèi)代碼如下:
@SpringBootApplication
public class NetflixFeignProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NetflixFeignProviderApplication.class, args);
}
}
4.控制層
我們可以寫(xiě)一個(gè)Controller控制器,定義web界面如下。
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
/**
* 模擬主鍵自增
*/
private AtomicInteger pk = new AtomicInteger();
<p>

@PostMappingpublic User save(@RequestBody User user) {
user.setUid(pk.incrementAndGet());
return user;
}
/**
* @param uid
* @return
*/@GetMapping("/{uid}")
public User user(@PathVariable("uid") int uid) {
return User.builder()
.uid(uid)
.username("admin")
.password("123456")
.build();
}
@GetMapping("/users")
public List users(@RequestHeader("token") String token) {
// 模擬從數據中獲取數據
ArrayList users = new ArrayList();
for (int i = 1; i
解決方案:支付寶小程序:人臉采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 411 次瀏覽 ? 2022-11-23 09:41
產(chǎn)品描述
人臉識別是公共服務(wù)場(chǎng)所提高業(yè)務(wù)效率和用戶(hù)體驗的新途徑。人臉采集是指在獲得用戶(hù)充分授權認可、充分保護用戶(hù)隱私的前提下,獲取符合質(zhì)量要求的活人。人臉圖片用于后續比對、識別等操作,提升商戶(hù)服務(wù)質(zhì)量。核心功能包括:
用戶(hù)界面
調用過(guò)程
應用場(chǎng)景
人臉應用廣泛,可應用于以下場(chǎng)景:
場(chǎng)景
描述
拍攝證件照
小程序提供拍攝證件照的功能,光線(xiàn)角度好。
團餐
在校園點(diǎn)餐場(chǎng)景中,錄入學(xué)生人臉,用于刷臉點(diǎn)餐。
不建議使用通過(guò)人臉采集小程序返回給開(kāi)發(fā)者的真人照片與開(kāi)發(fā)者自己的比對源圖在安全性較差的比對算法下進(jìn)行身份驗證。如果開(kāi)發(fā)者需要驗證身份,請使用支付寶身份驗證?或其他開(kāi)放通道人臉認證產(chǎn)品。由于支付寶身份驗證產(chǎn)品擁有完備的風(fēng)控體系和更安全的后臺活體檢測算法,具有非常強的抗攻擊和防誤識別能力。
注意:
小程序“人臉認證”開(kāi)放能力全面升級為“支付寶認證”,推薦開(kāi)發(fā)者使用“支付寶認證”能力;已簽約上線(xiàn)“人臉認證”的小程序可繼續使用。
訪(fǎng)問(wèn)要求
注意:
計費方式
自由的
接入指南第一步:創(chuàng )建小程序
要在您的小程序中使用人臉抓拍功能,您需要先完成開(kāi)發(fā)者注冊并創(chuàng )建一個(gè)小程序。
第二步:添加功能
小程序創(chuàng )建完成后,開(kāi)發(fā)者可以在“能力列表”部分點(diǎn)擊“添加能力”,為創(chuàng )建的小程序添加能力,如下圖;開(kāi)發(fā)者勾選人臉采集能力后,點(diǎn)擊右下角的確定完成添加。
第三步:承包能力
人臉采集功能需要簽名才能生效。請點(diǎn)擊功能列表右側的“立即注冊”。簽約成功后,狀態(tài)會(huì )置為“Active”,即可調用人臉采集接口。
第四步:集成并配置SDK
服務(wù)端SDK需要商家在自己的服務(wù)端系統中集成,用于后續服務(wù)端接口調用。
下載服務(wù)端SDK
為了方便開(kāi)發(fā)者調用開(kāi)放接口,我們提供開(kāi)放平臺服務(wù)端SDK,包括JAVA、PHP、NodeJS、Python、.NET五種語(yǔ)言,封裝了簽名&驗證、HTTP接口請求等基礎功能,請下載相應語(yǔ)言版本的SDK并導入到您的開(kāi)發(fā)項目中。
接口調用配置
在調用 SDK 之前需要對其進(jìn)行初始化。以JAVA代碼為例:
AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
關(guān)鍵參數說(shuō)明:
配置參數
示例值解釋
如何獲取/示例值
網(wǎng)址
支付寶網(wǎng)關(guān)(固定)
APPID
創(chuàng )建應用后生成APPID
獲取查看創(chuàng )建應用程序
APP_PRIVATE_KEY
開(kāi)發(fā)者私鑰,由開(kāi)發(fā)者自己生成
獲取配置密鑰
格式
參數返回格式,只支持json
json(固定)
字符集
編碼集,支持GBK/UTF-8
開(kāi)發(fā)者根據實(shí)際工程代碼進(jìn)行配置
ALIPAY_PUBLIC_KEY
支付寶公鑰,由支付寶生成
有關(guān)詳細信息,請參閱配置密鑰
SIGN_TYPE
商戶(hù)生成簽名串使用的簽名算法類(lèi)型。目前支持RSA2和RSA,推薦使用RSA2
RSA2
接下來(lái)就可以使用alipayClient來(lái)調用具體的API了。AlipayClient只需要初始化一次,后續調用不同的API可以使用同一個(gè)alipayClient對象。
注意:
ISV/開(kāi)發(fā)者可以通過(guò)第三方應用授權獲取商家授權令牌(app_auth_token)作為請求參數,實(shí)現代表商家發(fā)起請求的能力。
第五步:調用接口
調用流程圖
調用 JSAPI (faceVerify) 調用人臉采集。整個(gè)采集過(guò)程完全由人臉執行。采集完成后,通過(guò)回調函數返回采集結果。在采集過(guò)程中,客戶(hù)端完成人臉采集過(guò)程和活體檢測,然后將采集到的人臉特征數據上傳到服務(wù)器進(jìn)行進(jìn)一步的活體檢測,最后將采集結果返回給客戶(hù)端。
調用查詢(xún)接口(zoloz.identification.user.web.query)獲取可信的采集結果。如果采集成功,可以通過(guò)該接口獲取采集到的人臉照片。
主要步驟
版本要求:
調用接口my.ap.faceVerify,傳入參數bizId和bizType,即可觸發(fā)人臉采集。采集完成后,通過(guò)回調函數獲取采集結果。
請注意,在 my.ap.faceVerify 調用返回之前,切記不要發(fā)起第二次 faceVerify 調用,否則會(huì )產(chǎn)生異常。例如,如果您的小程序通過(guò)單擊頁(yè)面上的按鈕觸發(fā)對 my.ap.faceVerify 的調用,請確保在調用返回之前禁用該按鈕,以防止用戶(hù)進(jìn)行多次單擊。
代碼示例
my.ap.faceVerify({ bizId: '545689787654767653', //業(yè)務(wù)流水號,商戶(hù)自行生成,需要保證唯一性,不超過(guò)64位 bizType: '1', //業(yè)務(wù)場(chǎng)景參數,‘1’代表人臉采集,請務(wù)必填寫(xiě) useBackCamera: true, //傳入此參數會(huì )喚起后置攝像頭;非必填,不傳默認喚起前置攝像頭 success: (res) => { my.alert({ content: JSON.stringify(res), }); }, fail: (res) => { my.alert({ content: JSON.stringify(res), }); }});
成功認證結果示例
faceRetCode = 1000表示人臉采集成功,調用查詢(xún)接口(zoloz.identification.user.web.query)可以成功獲取照片,證明人臉采集成功。
{ faceRetCode: "1000", retCode: "OK_SUCCESS", retCodeSub: "Z5100", retMessageSub: "成功 (Z5100)", zimId: "7b6b72be1493cab72dd0a25877de329dd00"}undefined
注意retCode表示人臉識別可用成功,只有人臉識別可用時(shí)才能進(jìn)行人臉采集。
調用人臉采集查詢(xún)接口(zoloz.identification.user.web.query)獲取人臉照片。以下請求示例代碼以JAVA為例:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest();request.setBizContent("{" +""biz_id":"5456897876546767654"," +""zim_id":"731be7f204a962b0486a9b64ea3050ae"," +""extern_param":"{"bizType":"1"}"" +"}");ZolozIdentificationUserWebQueryResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("調用成功");} else {System.out.println("調用失敗");}undefined
成功響應的示例
如果采集成功,則imgStr對象中的值為人臉照片的base64編碼字符串。
{ "zoloz_identification_user_web_query_response": { "code": "10000", "msg": "Success", "extern_info": "{"imgStr":"ApA4VVwOP1rqp8sotrcimna3c__9k","bizId":"5456897876546767654-doucao.wjp","zimMsg":"成功","zimCode":"Z5130"}" }, "sign": "SL1dSiE6XKKIta5w3ge3VSZE+71CdBtr8Ocw9WvRSZD3Tz6/vNaA2pWLBYdZcvrAHaMYa6J8V9c4nY3kdBK0EeU2afh+8CLTw6dnZfkO8tR5NOtJUb+M6qhxl0xKhpE+2GUonpCcJg1MHS0aMVXa/b6dhK/yZJQCdO1YnVNuzs8="}
失敗響應示例
{ "zoloz_identification_user_web_query_response": { "code": "40004", "msg": "Business Failed", "sub_code": "INVALID_PARAMETER", "sub_msg": "參數有誤抱歉,系統出錯了,請您稍后再試 (Z5132)" }, "sign": "v/DjkviKs2ja3HO9ZZ94W8bcfAsLyRuGrZT/TlFm6FgGQv4qSm/94o1FjOaMCl/t8XIm89bBhk03PBJ099alDzjnj4RD6S9FYDV7CfjvHYjrzvVJzn47Gc1mWdOHZ38DFQLWIg1IbNKFmYdoR+NdY5nY/cwz3Al2wfEylvN1cbs="}
API列表
接口英文名稱(chēng)
接口說(shuō)明
我的.ap.faceVerify
人臉合集
zoloz.identification.user.web.query
人臉采集結果查詢(xún)
常見(jiàn)問(wèn)題:如果一個(gè)用戶(hù)有多個(gè)支付寶賬戶(hù),調用人臉識別驗證接口時(shí)返回的user_id是否相同?
A:首先返回用戶(hù)上次使用的支付寶賬號對應的user_id。
Q:真機調試報錯 "retMessageSub":"{"error":4,"errorMessage":"Not authorized to call","message":"Not authorized to call","signature"怎么辦: “N22104”}?
A:人臉抓拍功能需要在小程序后臺添加人臉抓拍功能包并簽約使用。請參考此文檔訪(fǎng)問(wèn)指南
解決方案:可視化采集器(智能化采集)
目錄:
1、視覺(jué)采集軟件
使用CSS選擇器的采集軟件可以準確的提取我們的網(wǎng)頁(yè)元素。從用戶(hù)體驗的角度來(lái)看,XPATH有一個(gè)可視化的操作頁(yè)面,讓我們上手非常容易,但是為什么CSS選擇器一直被我們的采集軟件占用,雖然CSS的使用比較復雜,但是可以準確的捕捉一些元素XPATH 無(wú)法定位的文件。
2.可視化數據采集
所以大部分采集軟件都是XPATH和CSS并存
3、智能采集系統
從網(wǎng)頁(yè)元素提取的角度來(lái)看,CSS選擇器和XPath選擇器是一樣的。它們都幫助我們定位網(wǎng)頁(yè)中的相關(guān)元素,只是在語(yǔ)法表達上有所區別。從用戶(hù)的角度來(lái)看,通過(guò)視覺(jué)抓取頁(yè)面,我們可以完成80%以上的網(wǎng)站宣傳頁(yè)面數據抓取,少部分可以通過(guò)CSS選擇器來(lái)補充。兩個(gè)選擇器的組合使我們能夠覆蓋各種類(lèi)型的網(wǎng)頁(yè)。
4、智能信息采集
5、智能采集設備
在搜索結果中查看網(wǎng)頁(yè)時(shí),我們注意到它們在鏈接下方收錄
一小段信息。這稱(chēng)為“描述”。描述是 SEO 的有用工具。簡(jiǎn)短、朗朗上口的描述有助于說(shuō)服用戶(hù)點(diǎn)擊文章。雖然元描述并非我們網(wǎng)站的所有 SEO 方面都是最終的,但最好將它們分類(lèi)以防止出現任何錯誤。
6、智能采集攝像系統
它們需要有特定的長(cháng)度才能在搜索引擎結果中完整顯示,并且它們需要對每個(gè)頁(yè)面和 關(guān)鍵詞 都是唯一的
7.實(shí)時(shí)采集可視化工具
優(yōu)化我們的內容,當我們制定內容 SEO 策略時(shí),我們可能認為越多越好。定期發(fā)布新內容有助于吸引新訪(fǎng)問(wèn)者訪(fǎng)問(wèn)我們的網(wǎng)站并保持人們的參與度。然而,大多數時(shí)候,答案不是數量,而是質(zhì)量。
8.數據采集
和可視化
這就是內容優(yōu)化發(fā)揮作用的地方。這是查看我們網(wǎng)站上現有內容并詢(xún)問(wèn)“我如何才能更好地優(yōu)化它?”的過(guò)程。這通常并不意味著(zhù)重寫(xiě)整篇文章。相反,它涉及考慮內容的某些方面。我們是否選擇了正確的字數?查看涵蓋同一主題的成功文章并檢查其字數。
9.如何持續采集
可視化
10、智能數據采集控制器
我們是否盡可能有效地使用 關(guān)鍵詞?找到合適的 關(guān)鍵詞 是內容營(yíng)銷(xiāo)的重要組成部分。但密度也很重要。確保避免過(guò)度使用 關(guān)鍵詞。關(guān)鍵詞 的更多實(shí)例并不意味著(zhù)它的排名更好 - 事實(shí)上恰恰相反。
我們是否涵蓋相關(guān)主題?最好的文章涵蓋多個(gè)用戶(hù)查詢(xún)。查找其他相關(guān)主題以收錄
在我們的文章中。在我們花時(shí)間優(yōu)化一個(gè)頁(yè)面之后,我們會(huì )想知道它的表現如何。SEO Tools 的 CSS 文章抓取軟件使我們能夠訪(fǎng)問(wèn) SEO?;顒?dòng)進(jìn)度更新。
我們可能已經(jīng)努力為我們的網(wǎng)站創(chuàng )建內容,但如果我們要獲得 SEO 回報,用戶(hù)需要堅持下去。搜索引擎將“停留時(shí)間”描述為其主要的 SEO 優(yōu)先事項之一。顧名思義,這是用戶(hù)停留在頁(yè)面上并閱讀它的時(shí)候。文章時(shí)間
結合CSS選擇器和XPATH選擇器的文章合集軟件分享到此結束。通過(guò)簡(jiǎn)單準確的網(wǎng)頁(yè)內容提取,我們可以快速獲取我們需要的公共數據和內容,從而提高我們的工作效率。如果你喜歡這篇文章,不妨采集
點(diǎn)贊。您的支持是博主不斷更新的動(dòng)力。
主題測試文章,僅供測試使用。發(fā)布者:小新SEO,轉載請注明出處: 查看全部
解決方案:支付寶小程序:人臉采集
產(chǎn)品描述
人臉識別是公共服務(wù)場(chǎng)所提高業(yè)務(wù)效率和用戶(hù)體驗的新途徑。人臉采集是指在獲得用戶(hù)充分授權認可、充分保護用戶(hù)隱私的前提下,獲取符合質(zhì)量要求的活人。人臉圖片用于后續比對、識別等操作,提升商戶(hù)服務(wù)質(zhì)量。核心功能包括:
用戶(hù)界面
調用過(guò)程
應用場(chǎng)景
人臉應用廣泛,可應用于以下場(chǎng)景:
場(chǎng)景
描述
拍攝證件照
小程序提供拍攝證件照的功能,光線(xiàn)角度好。
團餐
在校園點(diǎn)餐場(chǎng)景中,錄入學(xué)生人臉,用于刷臉點(diǎn)餐。
不建議使用通過(guò)人臉采集小程序返回給開(kāi)發(fā)者的真人照片與開(kāi)發(fā)者自己的比對源圖在安全性較差的比對算法下進(jìn)行身份驗證。如果開(kāi)發(fā)者需要驗證身份,請使用支付寶身份驗證?或其他開(kāi)放通道人臉認證產(chǎn)品。由于支付寶身份驗證產(chǎn)品擁有完備的風(fēng)控體系和更安全的后臺活體檢測算法,具有非常強的抗攻擊和防誤識別能力。
注意:
小程序“人臉認證”開(kāi)放能力全面升級為“支付寶認證”,推薦開(kāi)發(fā)者使用“支付寶認證”能力;已簽約上線(xiàn)“人臉認證”的小程序可繼續使用。
訪(fǎng)問(wèn)要求
注意:
計費方式
自由的
接入指南第一步:創(chuàng )建小程序
要在您的小程序中使用人臉抓拍功能,您需要先完成開(kāi)發(fā)者注冊并創(chuàng )建一個(gè)小程序。
第二步:添加功能
小程序創(chuàng )建完成后,開(kāi)發(fā)者可以在“能力列表”部分點(diǎn)擊“添加能力”,為創(chuàng )建的小程序添加能力,如下圖;開(kāi)發(fā)者勾選人臉采集能力后,點(diǎn)擊右下角的確定完成添加。
第三步:承包能力
人臉采集功能需要簽名才能生效。請點(diǎn)擊功能列表右側的“立即注冊”。簽約成功后,狀態(tài)會(huì )置為“Active”,即可調用人臉采集接口。
第四步:集成并配置SDK
服務(wù)端SDK需要商家在自己的服務(wù)端系統中集成,用于后續服務(wù)端接口調用。
下載服務(wù)端SDK

為了方便開(kāi)發(fā)者調用開(kāi)放接口,我們提供開(kāi)放平臺服務(wù)端SDK,包括JAVA、PHP、NodeJS、Python、.NET五種語(yǔ)言,封裝了簽名&驗證、HTTP接口請求等基礎功能,請下載相應語(yǔ)言版本的SDK并導入到您的開(kāi)發(fā)項目中。
接口調用配置
在調用 SDK 之前需要對其進(jìn)行初始化。以JAVA代碼為例:
AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
關(guān)鍵參數說(shuō)明:
配置參數
示例值解釋
如何獲取/示例值
網(wǎng)址
支付寶網(wǎng)關(guān)(固定)
APPID
創(chuàng )建應用后生成APPID
獲取查看創(chuàng )建應用程序
APP_PRIVATE_KEY
開(kāi)發(fā)者私鑰,由開(kāi)發(fā)者自己生成
獲取配置密鑰
格式
參數返回格式,只支持json
json(固定)
字符集
編碼集,支持GBK/UTF-8
開(kāi)發(fā)者根據實(shí)際工程代碼進(jìn)行配置
ALIPAY_PUBLIC_KEY
支付寶公鑰,由支付寶生成
有關(guān)詳細信息,請參閱配置密鑰
SIGN_TYPE
商戶(hù)生成簽名串使用的簽名算法類(lèi)型。目前支持RSA2和RSA,推薦使用RSA2
RSA2
接下來(lái)就可以使用alipayClient來(lái)調用具體的API了。AlipayClient只需要初始化一次,后續調用不同的API可以使用同一個(gè)alipayClient對象。
注意:
ISV/開(kāi)發(fā)者可以通過(guò)第三方應用授權獲取商家授權令牌(app_auth_token)作為請求參數,實(shí)現代表商家發(fā)起請求的能力。
第五步:調用接口

調用流程圖
調用 JSAPI (faceVerify) 調用人臉采集。整個(gè)采集過(guò)程完全由人臉執行。采集完成后,通過(guò)回調函數返回采集結果。在采集過(guò)程中,客戶(hù)端完成人臉采集過(guò)程和活體檢測,然后將采集到的人臉特征數據上傳到服務(wù)器進(jìn)行進(jìn)一步的活體檢測,最后將采集結果返回給客戶(hù)端。
調用查詢(xún)接口(zoloz.identification.user.web.query)獲取可信的采集結果。如果采集成功,可以通過(guò)該接口獲取采集到的人臉照片。
主要步驟
版本要求:
調用接口my.ap.faceVerify,傳入參數bizId和bizType,即可觸發(fā)人臉采集。采集完成后,通過(guò)回調函數獲取采集結果。
請注意,在 my.ap.faceVerify 調用返回之前,切記不要發(fā)起第二次 faceVerify 調用,否則會(huì )產(chǎn)生異常。例如,如果您的小程序通過(guò)單擊頁(yè)面上的按鈕觸發(fā)對 my.ap.faceVerify 的調用,請確保在調用返回之前禁用該按鈕,以防止用戶(hù)進(jìn)行多次單擊。
代碼示例
my.ap.faceVerify({ bizId: '545689787654767653', //業(yè)務(wù)流水號,商戶(hù)自行生成,需要保證唯一性,不超過(guò)64位 bizType: '1', //業(yè)務(wù)場(chǎng)景參數,‘1’代表人臉采集,請務(wù)必填寫(xiě) useBackCamera: true, //傳入此參數會(huì )喚起后置攝像頭;非必填,不傳默認喚起前置攝像頭 success: (res) => { my.alert({ content: JSON.stringify(res), }); }, fail: (res) => { my.alert({ content: JSON.stringify(res), }); }});
成功認證結果示例
faceRetCode = 1000表示人臉采集成功,調用查詢(xún)接口(zoloz.identification.user.web.query)可以成功獲取照片,證明人臉采集成功。
{ faceRetCode: "1000", retCode: "OK_SUCCESS", retCodeSub: "Z5100", retMessageSub: "成功 (Z5100)", zimId: "7b6b72be1493cab72dd0a25877de329dd00"}undefined
注意retCode表示人臉識別可用成功,只有人臉識別可用時(shí)才能進(jìn)行人臉采集。
調用人臉采集查詢(xún)接口(zoloz.identification.user.web.query)獲取人臉照片。以下請求示例代碼以JAVA為例:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest();request.setBizContent("{" +""biz_id":"5456897876546767654"," +""zim_id":"731be7f204a962b0486a9b64ea3050ae"," +""extern_param":"{"bizType":"1"}"" +"}");ZolozIdentificationUserWebQueryResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("調用成功");} else {System.out.println("調用失敗");}undefined
成功響應的示例
如果采集成功,則imgStr對象中的值為人臉照片的base64編碼字符串。
{ "zoloz_identification_user_web_query_response": { "code": "10000", "msg": "Success", "extern_info": "{"imgStr":"ApA4VVwOP1rqp8sotrcimna3c__9k","bizId":"5456897876546767654-doucao.wjp","zimMsg":"成功","zimCode":"Z5130"}" }, "sign": "SL1dSiE6XKKIta5w3ge3VSZE+71CdBtr8Ocw9WvRSZD3Tz6/vNaA2pWLBYdZcvrAHaMYa6J8V9c4nY3kdBK0EeU2afh+8CLTw6dnZfkO8tR5NOtJUb+M6qhxl0xKhpE+2GUonpCcJg1MHS0aMVXa/b6dhK/yZJQCdO1YnVNuzs8="}
失敗響應示例
{ "zoloz_identification_user_web_query_response": { "code": "40004", "msg": "Business Failed", "sub_code": "INVALID_PARAMETER", "sub_msg": "參數有誤抱歉,系統出錯了,請您稍后再試 (Z5132)" }, "sign": "v/DjkviKs2ja3HO9ZZ94W8bcfAsLyRuGrZT/TlFm6FgGQv4qSm/94o1FjOaMCl/t8XIm89bBhk03PBJ099alDzjnj4RD6S9FYDV7CfjvHYjrzvVJzn47Gc1mWdOHZ38DFQLWIg1IbNKFmYdoR+NdY5nY/cwz3Al2wfEylvN1cbs="}
API列表
接口英文名稱(chēng)
接口說(shuō)明
我的.ap.faceVerify
人臉合集
zoloz.identification.user.web.query
人臉采集結果查詢(xún)
常見(jiàn)問(wèn)題:如果一個(gè)用戶(hù)有多個(gè)支付寶賬戶(hù),調用人臉識別驗證接口時(shí)返回的user_id是否相同?
A:首先返回用戶(hù)上次使用的支付寶賬號對應的user_id。
Q:真機調試報錯 "retMessageSub":"{"error":4,"errorMessage":"Not authorized to call","message":"Not authorized to call","signature"怎么辦: “N22104”}?
A:人臉抓拍功能需要在小程序后臺添加人臉抓拍功能包并簽約使用。請參考此文檔訪(fǎng)問(wèn)指南
解決方案:可視化采集器(智能化采集)
目錄:
1、視覺(jué)采集軟件
使用CSS選擇器的采集軟件可以準確的提取我們的網(wǎng)頁(yè)元素。從用戶(hù)體驗的角度來(lái)看,XPATH有一個(gè)可視化的操作頁(yè)面,讓我們上手非常容易,但是為什么CSS選擇器一直被我們的采集軟件占用,雖然CSS的使用比較復雜,但是可以準確的捕捉一些元素XPATH 無(wú)法定位的文件。
2.可視化數據采集
所以大部分采集軟件都是XPATH和CSS并存
3、智能采集系統
從網(wǎng)頁(yè)元素提取的角度來(lái)看,CSS選擇器和XPath選擇器是一樣的。它們都幫助我們定位網(wǎng)頁(yè)中的相關(guān)元素,只是在語(yǔ)法表達上有所區別。從用戶(hù)的角度來(lái)看,通過(guò)視覺(jué)抓取頁(yè)面,我們可以完成80%以上的網(wǎng)站宣傳頁(yè)面數據抓取,少部分可以通過(guò)CSS選擇器來(lái)補充。兩個(gè)選擇器的組合使我們能夠覆蓋各種類(lèi)型的網(wǎng)頁(yè)。
4、智能信息采集

5、智能采集設備
在搜索結果中查看網(wǎng)頁(yè)時(shí),我們注意到它們在鏈接下方收錄
一小段信息。這稱(chēng)為“描述”。描述是 SEO 的有用工具。簡(jiǎn)短、朗朗上口的描述有助于說(shuō)服用戶(hù)點(diǎn)擊文章。雖然元描述并非我們網(wǎng)站的所有 SEO 方面都是最終的,但最好將它們分類(lèi)以防止出現任何錯誤。
6、智能采集攝像系統
它們需要有特定的長(cháng)度才能在搜索引擎結果中完整顯示,并且它們需要對每個(gè)頁(yè)面和 關(guān)鍵詞 都是唯一的
7.實(shí)時(shí)采集可視化工具
優(yōu)化我們的內容,當我們制定內容 SEO 策略時(shí),我們可能認為越多越好。定期發(fā)布新內容有助于吸引新訪(fǎng)問(wèn)者訪(fǎng)問(wèn)我們的網(wǎng)站并保持人們的參與度。然而,大多數時(shí)候,答案不是數量,而是質(zhì)量。
8.數據采集
和可視化
這就是內容優(yōu)化發(fā)揮作用的地方。這是查看我們網(wǎng)站上現有內容并詢(xún)問(wèn)“我如何才能更好地優(yōu)化它?”的過(guò)程。這通常并不意味著(zhù)重寫(xiě)整篇文章。相反,它涉及考慮內容的某些方面。我們是否選擇了正確的字數?查看涵蓋同一主題的成功文章并檢查其字數。
9.如何持續采集
可視化

10、智能數據采集控制器
我們是否盡可能有效地使用 關(guān)鍵詞?找到合適的 關(guān)鍵詞 是內容營(yíng)銷(xiāo)的重要組成部分。但密度也很重要。確保避免過(guò)度使用 關(guān)鍵詞。關(guān)鍵詞 的更多實(shí)例并不意味著(zhù)它的排名更好 - 事實(shí)上恰恰相反。
我們是否涵蓋相關(guān)主題?最好的文章涵蓋多個(gè)用戶(hù)查詢(xún)。查找其他相關(guān)主題以收錄
在我們的文章中。在我們花時(shí)間優(yōu)化一個(gè)頁(yè)面之后,我們會(huì )想知道它的表現如何。SEO Tools 的 CSS 文章抓取軟件使我們能夠訪(fǎng)問(wèn) SEO?;顒?dòng)進(jìn)度更新。
我們可能已經(jīng)努力為我們的網(wǎng)站創(chuàng )建內容,但如果我們要獲得 SEO 回報,用戶(hù)需要堅持下去。搜索引擎將“停留時(shí)間”描述為其主要的 SEO 優(yōu)先事項之一。顧名思義,這是用戶(hù)停留在頁(yè)面上并閱讀它的時(shí)候。文章時(shí)間
結合CSS選擇器和XPATH選擇器的文章合集軟件分享到此結束。通過(guò)簡(jiǎn)單準確的網(wǎng)頁(yè)內容提取,我們可以快速獲取我們需要的公共數據和內容,從而提高我們的工作效率。如果你喜歡這篇文章,不妨采集
點(diǎn)贊。您的支持是博主不斷更新的動(dòng)力。
主題測試文章,僅供測試使用。發(fā)布者:小新SEO,轉載請注明出處:
解決方案:labview100個(gè)實(shí)例之簡(jiǎn)單采集(2)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 137 次瀏覽 ? 2022-11-23 08:27
目錄
提示:文章寫(xiě)完后,目錄可以
前言
之前做過(guò)一個(gè)很簡(jiǎn)單的程序,但總覺(jué)得不能體現labview真正的特點(diǎn),所以打算做一個(gè)系列,讓一些初學(xué)者容易理解這些。首先是模塊化和功能封裝的概念。
1.例子
這是一個(gè)完整的主程序框圖,可以清楚的看到分為兩大區域——“參數”設置區和“主界面”。主界面收錄
四個(gè)區域,分別是修改頻率較高的參數區、控制區(啟停)、狀態(tài)區和顯示區。用于采集一段時(shí)間內的聲音和電流信號。
運行效果為:
設置采集條件和數據存儲路徑,通過(guò)按鈕控制采集的開(kāi)始,程序按照指定的采樣率采集一段時(shí)間的信號并保存時(shí)域數據(原創(chuàng )
數據,方便后期數據處理)。如果可能,你可以嘗試運行一下來(lái)測試一下效果。
模塊化與功能封裝.zip-MCU文檔資源-CSDN文庫
2. 模塊化與功能封裝 1. 模塊化
Labview的一大特點(diǎn)是程序往往以模塊化的方式構建,也就是常說(shuō)的子VI。
2.功能封裝
如圖所示,此時(shí)我們說(shuō)這個(gè)程序使用了三個(gè)子VI,分別封裝了采集、回放、存儲三個(gè)功能。
在制作子VI時(shí),需要明確需要封裝的函數,輸入輸出的數據類(lèi)型。在保證通用性的前提下,主程序框圖應該是最簡(jiǎn)潔的。
總結
本例主要是簡(jiǎn)單說(shuō)明Labview中子VI的功能以及函數封裝的方便性。當我們創(chuàng )建一個(gè)子VI并賦予它特定的功能時(shí),我們可以很方便地在項目的任何地方調用它,而不需要再次編輯重復的代碼。
特別注意的是,當一個(gè)子VI被我們封裝后,理論上我們可以直接在本程序中調用。但往往在一個(gè)大型項目中,一些子VI因為其功能而被頻繁使用,我們需要考慮是否要重復調用它們。重復調用是指我們在某個(gè)時(shí)間多次調用同一個(gè)子VI,程序會(huì )等待并逐次執行每次調用,導致程序運行時(shí)間發(fā)生變化甚至數據沖突(因為一般一個(gè)子VI計算機只分配一塊內存空間 同時(shí)調用時(shí),我們不知道誰(shuí)先調用并輸出結果)。
我們可以在VI的屬性——“執行”欄中將VI設置為可重入VI。這樣,程序運行時(shí),當在多個(gè)地方同時(shí)調用這個(gè)VI時(shí),會(huì )創(chuàng )建不同的工作區,多個(gè)調用者的數據會(huì )分別存儲,不會(huì )發(fā)生沖突和干擾。
★ 范例中提到的結構、文件、信號處理和信號分析的范例版本及后續計劃為17版本,如需降級請及時(shí)聯(lián)系我們。
解決方案:采購內容及技術(shù)要求
一、采購要求
一、項目建設背景
政府網(wǎng)站是現代政府在信息化條件下政府密切聯(lián)系人民群眾的重要橋梁,是網(wǎng)絡(luò )時(shí)代政府履行職責的重要平臺,是各級政府機關(guān)提供信息公開(kāi)、回應關(guān)切、辦事服務(wù)、互動(dòng)交流的重要載體。近年來(lái),黨中央、國務(wù)院、四川省政府高度重視政府網(wǎng)站建設和管理工作,先后下發(fā)了多項關(guān)于加強政府網(wǎng)站建設的管理規定。從2015年4月起,國務(wù)院開(kāi)展了全國政府網(wǎng)站普查工作,對政府網(wǎng)站的建設起到了前所未有的推動(dòng)作用。
2017年5月,《國務(wù)院辦公廳關(guān)于印發(fā)政府網(wǎng)站發(fā)展指引的通知》(國辦發(fā)〔2017〕47號)發(fā)布,對政府網(wǎng)站集約化建設提出了詳細的建設要求。德陽(yáng)市政府網(wǎng)站集約化建設項目將以此為依據,并根據《四川省人民政府辦公廳關(guān)于加強政府網(wǎng)站信息內容建設的實(shí)施意見(jiàn)》(川辦發(fā)〔2015〕53號)和《德陽(yáng)市人民政府辦公室關(guān)于進(jìn)一步做好“互聯(lián)網(wǎng)+政務(wù)服務(wù)”有關(guān)工作的通知》(德辦函〔2016〕99號)以及政府網(wǎng)站績(jì)效考核的要求,以問(wèn)題和需求為導向,以為民服務(wù)為根本宗旨,順應公眾的期盼,按照利企便民的原則,樹(shù)立“以信息公開(kāi)為基礎、公共服務(wù)為核心”的理念,積極推進(jìn)政府網(wǎng)站集約化平臺建設、應用新技術(shù)拓展服務(wù)渠道,以增強網(wǎng)站用戶(hù)體驗、提高辦事服務(wù)、實(shí)現信息共享,為公眾提供優(yōu)質(zhì)、便捷、高效服務(wù)。
二、項目建設目標
根據國家和四川省政府網(wǎng)站績(jì)效考核指標及其他相關(guān)政策文件中對“互聯(lián)網(wǎng)+”環(huán)境下政府網(wǎng)站的定位,借鑒國內外領(lǐng)先政府網(wǎng)站的先進(jìn)經(jīng)驗和趨勢特點(diǎn),以“技術(shù)先進(jìn)、功能完備、服務(wù)智能、安全穩定”為建設原則,著(zhù)重新技術(shù)應用,基于大數據平臺,采用移動(dòng)互聯(lián)網(wǎng)等技術(shù)手段,建設德陽(yáng)智慧型、實(shí)用化、個(gè)性化、集約化網(wǎng)站群管理平臺,最終實(shí)現德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站、40個(gè)市級部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)、6個(gè)縣(市、區)政府門(mén)戶(hù)網(wǎng)站的集約化建設工作。建設總體目標如下:
?。? 加強信息資源整合,搭建全市統一的政府網(wǎng)站信息資源庫,有效管理全市政府網(wǎng)站信息資源。
?。? 建立信息支撐體系,提供網(wǎng)站信息采集技術(shù),豐富網(wǎng)站信息供給手段。能夠通過(guò)集約化平臺集中實(shí)現采集、發(fā)布信息和數據,實(shí)現主站與子站、子站與子站、子站與欄目和市級部門(mén)子站與縣級部門(mén)專(zhuān)欄等之間的互聯(lián)互通、信息復用,為信息公開(kāi)提供平臺支撐,充分發(fā)揮政府網(wǎng)站在政務(wù)公開(kāi)中第一平臺的作用。
?。? 加強網(wǎng)站智能化建設,提供智能搜索、智能問(wèn)答、智能推薦和無(wú)障礙訪(fǎng)問(wèn)等功能??筛鶕脩?hù)需求調整搜索排序、聚合相關(guān)服務(wù)等,實(shí)現“搜索即服務(wù)”。主動(dòng)為社會(huì )公眾提供智能、實(shí)用、便捷、精準、高效的網(wǎng)站服務(wù),提升政府網(wǎng)站的公共服務(wù)能力和水平。
?。? 建立健全網(wǎng)站內容保障監管體系,加強網(wǎng)站的運維、監管手段,提供切實(shí)有效的網(wǎng)站運維、監管能力,及時(shí)發(fā)現網(wǎng)站存在的問(wèn)題。保證網(wǎng)站運行安全、穩定,服務(wù)內容全面、準確。
?。? 提供統一、完善的網(wǎng)站互動(dòng)交流功能,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。
6. 注重政務(wù)微博、微信等互聯(lián)網(wǎng)新技術(shù)的應用,加強對移動(dòng)終端應用功能的支持,豐富公眾訪(fǎng)問(wèn)渠道,有效提高用戶(hù)體驗。
7.能夠通過(guò)“深度鏈接”、各類(lèi)接口整合等方式,實(shí)現全市統一的辦事服務(wù)入口和數據開(kāi)放入口;與有效與四川省政府信息公開(kāi)目錄管理系統、四川省一體化政務(wù)服務(wù)平臺、德陽(yáng)市政務(wù)信息資源共享平臺等進(jìn)行整合和對接,最終實(shí)現平臺互聯(lián)互通、信息資源共享。
8.圍繞2018年國家和四川省政府網(wǎng)站績(jì)效評估指標體系,對網(wǎng)站建設進(jìn)行升級優(yōu)化,提升德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站排名,力爭進(jìn)入省內前10名;加強網(wǎng)站建設的方向性引導、有效激勵服務(wù)改進(jìn)措施,保障網(wǎng)站持續發(fā)展。
三、總體技術(shù)要求
?。ㄒ唬┸浖a(chǎn)品技術(shù)要求
1.本次項目的投標商必須采用先進(jìn)且成熟的技術(shù)和產(chǎn)品,主要產(chǎn)品應具有云平臺部署成功案例。
2.軟件產(chǎn)品應具有網(wǎng)站集群化平臺建設能力。
3.系統需支持大量用戶(hù)訪(fǎng)問(wèn)和海量數據的存儲、檢索和管理,平臺功能部署靈活統一。
4.產(chǎn)品具有安全、可優(yōu)化、可擴展性能,易于二次開(kāi)發(fā),應免費提供接口。
5.系統應采用J2EE或其他符合行業(yè)發(fā)展方向的先進(jìn)技術(shù)架構;
6.系統應用結構體系的表示層、業(yè)務(wù)層、數據層、訪(fǎng)問(wèn)層應分開(kāi),支持分布式部署,支持無(wú)限站點(diǎn)擴展;
7.系統應支持Oracle、MySQL、Microsoft SQL Server等主流數據庫系統和主要國產(chǎn)化數據庫系統;
8.網(wǎng)站系統兼容性強,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
9.系統支持雙機熱備部署模式。
?。ǘ┻\行性能指標
1. 在網(wǎng)絡(luò )穩定的環(huán)境下,系統后臺單一操作的響應時(shí)間小于3秒;網(wǎng)站頁(yè)面訪(fǎng)問(wèn)響應時(shí)間小于1秒。
2. 網(wǎng)站滿(mǎn)足并發(fā)訪(fǎng)問(wèn)用戶(hù)數不低于10000的訪(fǎng)問(wèn)請求。
3. 支持初始數據量不少于100萬(wàn)記錄數,支持表空間自動(dòng)擴充。
4. 系統能夠實(shí)現滿(mǎn)足網(wǎng)站面向服務(wù)的目標,最終實(shí)現服務(wù)化、構件化、松耦合的SOA體系架構。
5. 系統提供7×24小時(shí)的連續運行,平均系統年故障時(shí)間≤2個(gè)小時(shí),平均故障修復時(shí)間≤30分鐘。
6. 網(wǎng)頁(yè)代碼和標記設計盡可能簡(jiǎn)化,以節約帶寬。
7. 網(wǎng)站要提供不間斷服務(wù),支持信息多個(gè)站點(diǎn)同時(shí)發(fā)布功能,單個(gè)站點(diǎn)故障或更新維護等不能影響其它站點(diǎn)的正常使用。
?。ㄈ┌踩阅芤?br /> 1. 系統應支持分布式部署,系統應支持靜態(tài)頁(yè)面發(fā)布。
2. 系統應建立基于角色和工作分工的權限控制機制,重要信息需具備有效的加密方式進(jìn)行傳遞;系統應提供數據自動(dòng)非本機轉儲備份和故障恢復等應急響應功能,具備完善的日志記錄、審計和數據備份功能。
3. 具備良好的數據庫安全策略。系統安全設計符合《計算機信息系統安全保護等級劃分準則》(GB17859-1999)第三級(安全標記保護級)要求。
四、建設內容及功能性需求
此次項目招標主要目的是規劃、搭建好德陽(yáng)市政府網(wǎng)站集約化平臺,并完成“中國·德陽(yáng)”網(wǎng)的改版和40個(gè)市級政府部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)的集約化建設,但不包括德陽(yáng)市6縣(市、區)政府門(mén)戶(hù)網(wǎng)站集約化建設內容。德陽(yáng)市政府網(wǎng)站集約化平臺將部署在德陽(yáng)市政務(wù)云上。具體建設內容如下:
?。ㄒ唬┙y一用戶(hù)管理系統
將德陽(yáng)市使用站群系統的所有用戶(hù)統一管理起來(lái),實(shí)現用戶(hù)的屬性管理,并將用戶(hù)與組織機構相關(guān)聯(lián)。
用戶(hù)管理,提供對用戶(hù)的增、刪、改,可禁用和啟用用戶(hù)帳號,設置用戶(hù)擁有的功能權限;可自定義用戶(hù)組織架構;用戶(hù)組管理,提供對用戶(hù)組的增、刪、改,設置用戶(hù)組擁有的功能權限。
?。ǘ┬畔①Y源庫系統
以整合德陽(yáng)市所有政府網(wǎng)站資源實(shí)現共享為目標,建設集約化網(wǎng)站信息資源庫,實(shí)現對信息資源的統一分類(lèi)、統一展現、統一監管及各模塊之間的無(wú)縫調用,有效解決平臺建設資源共享的問(wèn)題。
1. 要求針對信息資源庫建設提出相應的解決方案和產(chǎn)品,滿(mǎn)足結構化和非結構化數據的數據庫建設。
2. 要求系統提供標準管理體系,即涵蓋已經(jīng)發(fā)布的國家標準、企業(yè)標準、行業(yè)標準和地方標準,也可以管理系統自定義的數據字典。
3. 要求系統具有資源庫管理,數據元管理,數據集管理,表單管理等數據庫基礎應用組件。
4. 要求系統提供分類(lèi)管理能力,分類(lèi)管理包括數據元分類(lèi)管理,數據分類(lèi)管理。
5. 要求系統提供資源管理能力,系統提供基本的數據錄入功能,也可以使用數據交換平臺,通過(guò)WebService或ETL工具進(jìn)行數據交換。
6. 要求系統提供共享管理能力,包括:自定義分組管理,共享維護,共享授權。共享授權實(shí)現數據分級管理,可以對用戶(hù)授權,也可以對分組授權。
7. 要求系統提供系統管理能力,包括用戶(hù)管理,角色管理,授權管理,日志管理。
?。ㄈ┘s化網(wǎng)站監管平臺
以“統一標準體系、統一技術(shù)平臺、統一安全防護、統一運維監管,集中管理信息數據,集中提供內容服務(wù)”為目標,結合網(wǎng)站屬地化管理體系,建設德陽(yáng)市政府網(wǎng)站集約化管理平臺,實(shí)現站點(diǎn)管理、規范性檢查、網(wǎng)站普查指標自檢、網(wǎng)站訪(fǎng)問(wèn)監控、網(wǎng)站維護監控、網(wǎng)站運行監控等功能,滿(mǎn)足網(wǎng)站集約化統一管理要求。具體功能如下:
1.站點(diǎn)監管
(1)提供站群系統內各子站基本信息管理功能,包括管理的站點(diǎn)名稱(chēng)、站點(diǎn)域名、站點(diǎn)描述信息、主辦單位及聯(lián)系人信息、網(wǎng)站備案信息等。
(2)按照《政府網(wǎng)站發(fā)展指引》要求提供各項網(wǎng)站規范性的監測功能,包括名稱(chēng)規范、域名規范、備案信息規范、模板規范、標簽規范、欄目規范等一致性檢查、冗余檢查、屬地化監測等。
2.網(wǎng)站普查指標監測
根據網(wǎng)站普查要求,提供網(wǎng)站指標監測功能,包括網(wǎng)站可用性監測、存在錯誤頁(yè)面分析、頁(yè)面關(guān)聯(lián)分析、空白欄目監測、欄目更新頻率監測、網(wǎng)站外鏈監測、敏感詞及錯別字掃描等。
3.網(wǎng)站訪(fǎng)問(wèn)監測
根據網(wǎng)站實(shí)際運行情況,可數字化或圖表化展現網(wǎng)站運行監控的各項訪(fǎng)問(wèn)指標,可對指定時(shí)間段的訪(fǎng)問(wèn)情況進(jìn)行統計、分析,并能生成統計分析報告(表)進(jìn)行打印或導出。監測功能及內容如下:
(1)搜索引擎監控:包括訪(fǎng)問(wèn)人次、站內搜索次數、搜索結果點(diǎn)擊次數、搜索結果點(diǎn)擊率、搜索引擎排行、網(wǎng)站檢索詞排行等。
(2)網(wǎng)站訪(fǎng)問(wèn)監控:包括訪(fǎng)問(wèn)渠道、瀏覽量、訪(fǎng)客數、平均停留時(shí)間、日訪(fǎng)問(wèn)變化趨勢圖等;
(3)瀏覽頁(yè)數性能監控:包括系統連接時(shí)間、響應時(shí)間、下載時(shí)間以及無(wú)法訪(fǎng)問(wèn)次數等;
(4)智能報警策略:包括故障的持續時(shí)間、問(wèn)題嚴重性分級、分類(lèi)報警,報警通知方式支持郵件、短信等。
4.網(wǎng)站維護監測
(1)針對網(wǎng)站內容管理進(jìn)行數據分析,包括網(wǎng)站欄目(欄目訪(fǎng)問(wèn)量、欄目信息量、欄目參與部門(mén)數和欄目參與人員數等)、部門(mén)信息(部門(mén)信息發(fā)布量、部門(mén)業(yè)務(wù)辦理量和部門(mén)業(yè)務(wù)辦結率等)和公共訴求(訴求目的、訴求內容分類(lèi)、處理單位、滿(mǎn)意度等)等數據的統計分析功能。
(2)提供系統站內通知功能,可對系統內各用戶(hù)發(fā)送消息,解決系統管理人員日常工作溝通及信息共享。
5.網(wǎng)站運行檢測
(1)支持對服務(wù)器硬件層進(jìn)行監控,包括服務(wù)器的工作狀態(tài)、處理器、內存、進(jìn)程等。
(2)提供靈活、全面、便捷的監控方式,監管頁(yè)面秒級刷新,運行高效、安全可靠。
6.系統日志管理
提供系統日志的管理界面,能詳細記錄系統操作日志,并形成日志信息或日志文件,可對日志文件進(jìn)行導出。
?。ㄋ模┚W(wǎng)站群管理平臺
以站點(diǎn)管理為重點(diǎn),支持集中式建設部署和分布式管理維護。
支持對歷史信息的調入、調出,提供對信息的全流程跟蹤管理。
支持與其它平臺的無(wú)縫對接。系統接口可開(kāi)放,支持網(wǎng)站擴展功能模塊的安裝調試,具有高集成、可擴展、易管理等特性。
采用XML、WebService等標準,提供組件化的統一數據接口,有效實(shí)現信息的采集、聚合。
1.站群管理系統
(1)要求實(shí)現頁(yè)面展現與信息分離,刪除或修改網(wǎng)頁(yè)模板時(shí)不會(huì )對信息造成影響。
(2)站群管理系統支持站群下所有子站點(diǎn)的創(chuàng )建、修改、暫停、刪除及服務(wù)器資源配置。
(3)系統提供多級授權分層管理機制,每個(gè)子站點(diǎn)都提供獨立的站點(diǎn)管理功能,站點(diǎn)管理人員能夠對子站點(diǎn)進(jìn)行角色權限管理、資源管理、用戶(hù)權限管理及站點(diǎn)統計等操作,保證用戶(hù)在統一的平臺下獨立管理自己的子站點(diǎn)。
(4)站群系統內各站點(diǎn)之間可以共享數據源,保證各站點(diǎn)信息的一致性。
(5)系統支持密碼強度管理、CA綁定等安全策略。
2.站點(diǎn)管理系統
(1)網(wǎng)站信息的發(fā)布具有靜態(tài)信息發(fā)布和動(dòng)態(tài)信息發(fā)布相結合的發(fā)布模式,用戶(hù)可根據實(shí)際需要選擇發(fā)布方式,以同時(shí)滿(mǎn)足網(wǎng)站訪(fǎng)問(wèn)速度、并發(fā)訪(fǎng)問(wèn)量及網(wǎng)站交互功能的多重需求。
(2)系統支持對多種信息格式的發(fā)布,包括音頻、視頻等多媒體格式。
(3)系統支持增量發(fā)布與完全發(fā)布,支持定時(shí)發(fā)布和立即發(fā)布,可根據需要自定義發(fā)布方式。
(4)系統提供統一用戶(hù)驗證功能,通過(guò)賬號、密碼、驗證碼相結合的方式登陸到系統管理界面。
(5)內容維護人員只能對自己權限范圍內的內容進(jìn)行管理,無(wú)權看到并操作其他用戶(hù)管理的內容。
(6)系統詳細記錄所有用戶(hù)的系統操作,以便于查詢(xún)和管理。
(7)系統提供權限組功能,具有相同權限的用戶(hù)可劃分為同一權限組。權限的分配可以詳細到每一個(gè)欄目。
(8)提供系統登陸賬號長(cháng)時(shí)間無(wú)操作的自動(dòng)注銷(xiāo)功能,可自行設置注銷(xiāo)時(shí)間。
(9)系統可根據自定義備份策略(如異地備份、定時(shí)備份等)進(jìn)行站點(diǎn)數據備份,能對備份文件進(jìn)行刪除、下載、恢復管理。
3.內容管理系統
(1)具有網(wǎng)站內容采集、在線(xiàn)編輯、審核發(fā)布、敏感詞過(guò)濾、錯別字檢測等功能,提供可視化編輯器,實(shí)現“所見(jiàn)即所得”的信息錄入、編輯效果。
(2)支持文檔錄入、發(fā)布、預覽、修改、刪除等操作,擁有豐富的文檔引用、復制、鏈接、移動(dòng)、同步等操作功能。
(3)內容編輯器具有多圖片上傳、word和pdf等文檔導入、一鍵排版、格式清理、去除空行、首行縮進(jìn)等常用功能;
(4)各子站點(diǎn)具有獨立、完善的信息采集、編發(fā)功能,可根據用戶(hù)權限進(jìn)行跨欄目、跨站點(diǎn)信息推送與共享。
(5)支持信息發(fā)布過(guò)程中的多級審核管理,能夠針對不同站點(diǎn)、不同欄目設置不同審核流程;
(6)支持前臺頁(yè)面樣式由模板進(jìn)行控制,模板提供代碼級修改,模板管理支持標簽語(yǔ)法,模板可嵌套模板,也可嵌套標簽;
(7)網(wǎng)站欄目能夠自由移動(dòng),可定制欄目信息發(fā)布類(lèi)型,可按權限獲取不同欄目、不同站點(diǎn)(如內容管理系統、信息公開(kāi)系統)的信息;
(8)信息錄入具備文章、組圖、鏈接、視頻四種類(lèi)型,能夠對普通文本、圖
片信息和音視頻等多種流媒體信息進(jìn)行發(fā)布和管理,滿(mǎn)足信息多樣化的需求;
(9)支持站點(diǎn)發(fā)布、分級欄目發(fā)布、信息單獨發(fā)布等操作,并可以指定文檔發(fā)布后在頁(yè)面顯示的順序;
(10)支持靜態(tài)發(fā)布、動(dòng)態(tài)發(fā)布和動(dòng)態(tài)靜態(tài)相結合的發(fā)布方式。
?。ㄎ澹┱畔⒐_(kāi)管理系統
根據部門(mén)業(yè)務(wù)和網(wǎng)站功能特點(diǎn)進(jìn)行科學(xué)分析、認真梳理,合理規劃頻道和欄目,與四川省政府信息公開(kāi)目錄管理系統進(jìn)行數據對接,有效實(shí)現德陽(yáng)市政府信息公開(kāi)數據在網(wǎng)站上的聚類(lèi)、共享、展示。
(1)該系統必須完全符合《政府信息公開(kāi)目錄系統實(shí)施指引(試行)》(國辦秘函[2009]6號)文件中的各項要求。
(2)要求系統提供靈活的元數據管理,以能適應不同類(lèi)型的信息記錄需要,元數據必需符合國家相關(guān)文件的要求,并具備元數據擴展功能;提供對多種類(lèi)型的元數據字段支持。定義數據層、功能層、使用層規范,同時(shí)配以編碼規則管理,支持批量修改,保持良好的擴展性;
(3)要求系統提供靈活的分類(lèi)管理,可自由地將采集到的信息進(jìn)行多渠道分類(lèi),包括主題分類(lèi)、機構分類(lèi)、體裁分類(lèi)及服務(wù)對象分類(lèi)。同時(shí)支持分類(lèi)的自由擴展。
(4)要求系統提供靈活的目錄管理功能,用戶(hù)可根據公眾的需要定義目錄的展現內容,通過(guò)定義目錄節點(diǎn)的生成規則,從而來(lái)獲取相應的數據,形成最終的人性化目錄;系統支持目錄推薦功能,即上級政府建立完成的目錄,可以作為“模板”推薦給下級單位。
(5)要求系統能夠自定義索引號編碼規則,依照信息公開(kāi)標準對信息進(jìn)行自動(dòng)編碼,生成信息索引號。當編碼規則發(fā)生修改時(shí),也可制定新規則,并批量修改信息索引號。
(6)要求系統提供良好的信息管理功能,從采集、標引、審核、發(fā)布到歸檔,完整記錄信息生命周期活動(dòng)。
(7)系統提供列表、簡(jiǎn)要、細覽等展現形式,顯示核心元數據,包括索引號、名稱(chēng)、內容概述、生成日期、文號等。
(8)系統應滿(mǎn)足信息錄入和審核權限的逐級分配,強化信息源頭管理,保障信息發(fā)布安全。
(9)系統具有依申請公開(kāi)功能,可對依申請公開(kāi)信息進(jìn)行接收、受理、審核、發(fā)布,并提供統計分析等功能,訪(fǎng)問(wèn)用戶(hù)可實(shí)時(shí)查詢(xún)依申請公開(kāi)處理狀態(tài)。
(10)要求系統提供綜合的績(jì)效評估模式,包括信息公開(kāi)工作量評估、依申
請公開(kāi)辦結率和辦結質(zhì)量評估。
?。┗?dòng)交流系統
系統嚴格遵循SOA模塊化設計思想,按照“高內聚,低耦合”原則,提供全面完善的網(wǎng)站互動(dòng)交流功能,包括領(lǐng)導信箱、民意征集、在線(xiàn)調查、咨詢(xún)投訴、網(wǎng)上信訪(fǎng)、在線(xiàn)訪(fǎng)談等,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。具體功能要求如下:
1.在線(xiàn)訪(fǎng)談系統
(1)支持圖文和視頻同步的在線(xiàn)訪(fǎng)談,要求具有文字直播、圖片直播、音頻直播及視頻直播四種功能形式;
(2)要求提供良好的人機對話(huà)界面,網(wǎng)友通過(guò)文字形式可實(shí)時(shí)提問(wèn),管理人員采集
和審核問(wèn)題,主持人轉達和引導提問(wèn),嘉賓對問(wèn)題實(shí)時(shí)解答;
(3)管理員可查看在線(xiàn)用戶(hù)情況,可以通過(guò)IP或用戶(hù)名來(lái)禁止用戶(hù)行為,可對用戶(hù)發(fā)言?xún)热菰O置過(guò)濾模式。
(4)主持人、嘉賓與網(wǎng)友的發(fā)言區要劃分明確;
(5)系統必須具有訪(fǎng)談預告功能,訪(fǎng)談預告可采用文字、圖片或視頻方式展示訪(fǎng)談背景和相關(guān)資料。
(6)訪(fǎng)談過(guò)程中要確保文字、圖片、音頻、視頻的流暢;
(7)對于歷史訪(fǎng)談,可按照日期進(jìn)行歸檔,形成歷史訪(fǎng)談目錄,網(wǎng)友可調閱歷史訪(fǎng)談。
(8)對于已經(jīng)完成的訪(fǎng)談,管理員可繼續對訪(fǎng)談內容進(jìn)行修改和編輯。
2.領(lǐng)導信箱系統
(1)系統具有工作流管理功能,可自定義信件辦理流程,實(shí)現從受理、轉辦、承辦、退回、辦結的全流程管理。
(2)系統具有信件辦理狀態(tài)實(shí)時(shí)查詢(xún)功能,來(lái)信人可根據信件編碼、姓名、聯(lián)系電話(huà)等對信件辦理狀態(tài)進(jìn)行查詢(xún),信箱管理人員可通過(guò)關(guān)鍵字、信件編碼、時(shí)間、部門(mén)、信件狀態(tài)等條件進(jìn)行查詢(xún)。
(3)前臺提供“信件選登”、“信件查詢(xún)”、“我要寫(xiě)信”等功能,寫(xiě)信內容需收錄
姓名、昵稱(chēng)、身份證號碼、聯(lián)系電話(huà)、電子郵件、信件標題、信件內容,可上傳附件材料等,具有詳實(shí)的展現形式,可對敏感詞進(jìn)行自動(dòng)屏蔽。
(4)后臺提供信件的回復、發(fā)布、選登等狀態(tài)的查看及信件辦理狀態(tài)的統計功能,提供信件的“公開(kāi)/不公開(kāi)”選項功能。
3.意見(jiàn)征集系統
(1)針對社會(huì )公眾關(guān)注的熱點(diǎn)問(wèn)題或者政策制定和工作成果開(kāi)展民意征集活動(dòng),民意征集的各個(gè)主題要求布局清晰、合理,方便閱覽;
(2)網(wǎng)友可根據征集主題的內容和背景資料發(fā)表自己的建議和觀(guān)點(diǎn),可以查看征集結果;
(3)系統后臺可實(shí)時(shí)查看所有社會(huì )公眾提交的意見(jiàn)和建議;
(4)意見(jiàn)征集結束后,前臺只保留征集主題、內容、結果,網(wǎng)友不能再進(jìn)行意見(jiàn)和建議的提交;
(5)能對網(wǎng)友發(fā)表的文字信息進(jìn)行安全性檢查。
4.網(wǎng)上調查系統
(1)管理員可根據不同的調查內容新建、修改、刪除調查問(wèn)卷。對于每個(gè)調查問(wèn)卷可以對標題、摘要、內容、選項、調查項組成結構等進(jìn)行管理,可靈活設計投票問(wèn)卷風(fēng)格;
(2)同一調查主題,可設置多個(gè)調查項;調查項應包括單選項調查、多選項調查、附加選項(填空)等調查類(lèi)型;
(3)同一IP地址在設定時(shí)間內只允許提交一次投票,杜絕惡意投票行為發(fā)生;
(4)投票結果可通過(guò)表格、柱狀圖、餅圖等形式進(jìn)行展現。
?。ㄆ撸祿杉到y
(1)數據采集系統借助先進(jìn)的信息抓取、信息分類(lèi)和信息流轉技術(shù),實(shí)現對指定網(wǎng)站信息(包括但不限于中央政府網(wǎng)站、省政府網(wǎng)站、重要新聞網(wǎng)站和平臺內外所需政府信息資源)的更新監測和有效采集。
(2)系統按照不同需要,可定點(diǎn)、定時(shí)監測和采集所需信息,并下載信息的圖片、視頻及附件等相關(guān)文件,將采集信息進(jìn)行準確分類(lèi)、整理、篩選,通過(guò)內容推送功能自動(dòng)推送到指定欄目。
(3)管理員可在后臺設置抓取的范圍、關(guān)鍵字、抓取時(shí)間等參數,系統根據設置好的抓取策略進(jìn)行信息自動(dòng)抓取。
(4)用戶(hù)可對采集到的信息按照日期、來(lái)源、標題進(jìn)行檢索、瀏覽;可以對信息內容與圖片分類(lèi)保存,支持信息分類(lèi)的自定義。
(5)系統支持將網(wǎng)頁(yè)中的信息內容按標題、作者、欄目、內容等進(jìn)行提??;自動(dòng)過(guò)濾網(wǎng)頁(yè)中的無(wú)用信息、廣告圖片等,自動(dòng)過(guò)濾重復的信息。
(6)對采集的信息可進(jìn)行二次編輯、審核,可向網(wǎng)站群內各個(gè)子站欄目進(jìn)行發(fā)布。
?。ò耍o(wú)障礙瀏覽系統
(1)面向聽(tīng)力、視力等有障礙的特殊人群提供縮放字體、縮放頁(yè)面、輔助光標、文本化網(wǎng)頁(yè)和語(yǔ)音個(gè)性化調整等輔助瀏覽功能。
(2)具有全程自動(dòng)語(yǔ)音提示、全程語(yǔ)音導航交互、光標語(yǔ)音指讀與連讀、文
字放大閱讀專(zhuān)用屏、網(wǎng)頁(yè)圖文放大縮小、高對比閱讀配色器、閱讀輔助光標等功能。
(3)系統需界面友好、易操作,無(wú)需安裝插件,支持各種主流瀏覽器。
?。ň牛┲悄軝z索系統
(1)提供專(zhuān)業(yè)的政府網(wǎng)站檢索功能,對政府網(wǎng)站檢索進(jìn)行分類(lèi)引導,按照政策法規、辦事事項、政府文件、新聞咨詢(xún)等類(lèi)別對用戶(hù)檢索內容進(jìn)行歸類(lèi)整理,清晰引導用戶(hù)進(jìn)行查閱。
(2)數據檢索范圍應包括站群內各業(yè)務(wù)部門(mén)、各縣(市、區)網(wǎng)站站點(diǎn),可對不同類(lèi)型數據源的數據進(jìn)行檢索。
(3)滿(mǎn)足即搜即用原則,支持圖片、視頻格式信息的檢索。
(4)支持關(guān)鍵字搜索、日期搜索。要求提供個(gè)性化檢索結果功能,如檢索結果分類(lèi)導航展現、檢索結果按不同維度(可以按系統,站點(diǎn),欄目,區縣,文檔類(lèi)型,時(shí)間單位,相似度等)過(guò)濾展示,檢索結果可進(jìn)行二次搜索。
(5)具有搜索關(guān)鍵詞自動(dòng)補全能力,動(dòng)態(tài)分析公眾搜索關(guān)鍵詞,按照關(guān)鍵詞的內在邏輯關(guān)系進(jìn)行自動(dòng)匹配,給出搜索提示,糾正用戶(hù)輸入錯誤。
(6)具有熱詞自動(dòng)排序和顯示功能,可自動(dòng)統計搜索關(guān)鍵詞的搜索頻度,將某一時(shí)間段內搜索量較高的關(guān)鍵詞作為搜索熱詞,并根據熱度動(dòng)態(tài)自動(dòng)調整排序。
(7)支持拼音搜索功能,采用詞語(yǔ)智能拼音匹配模式,并結合關(guān)鍵詞提醒聯(lián)想功能,實(shí)現拼音和中文友好聯(lián)系的搜索功能。
(8)系統支持管理員定義屏蔽詞和停用詞的搜索,當用戶(hù)輸入收錄
的詞匯時(shí),系統不展示搜索結果信息。
(9)支持多個(gè)關(guān)鍵詞搜索和整句搜索。
(10)系統使用基于文檔語(yǔ)義的技術(shù)實(shí)現同一站點(diǎn)內搜索結果信息的自動(dòng)排重,即“相同”的文檔在索引過(guò)程中僅被索引一次,解決大量相同文檔的搜索問(wèn)題,提高索引效率,幫助用戶(hù)快速找到搜索結果。
(11)對含有圖片的信息,其搜索結果列表應顯示其縮略圖;
(12)系統具有檢索結果優(yōu)先顯示置頂功能。
?。ㄊ┲悄芡扑]系統
(1)根據網(wǎng)站用戶(hù)訪(fǎng)問(wèn)行為,結合網(wǎng)站數據分析,找到網(wǎng)站訪(fǎng)問(wèn)熱點(diǎn),自動(dòng)聚合相關(guān)信息(即相關(guān)文件、政策、咨詢(xún)類(lèi)信息),實(shí)現網(wǎng)站信息智能推薦。
(2)可根據關(guān)鍵詞、熱詞等條件分析信息之間的直接聯(lián)系或間接關(guān)系,自動(dòng)分析、梳理、聚類(lèi)展示。
(3)可自動(dòng)進(jìn)行專(zhuān)題信息匯聚,通過(guò)數據采集技術(shù),獲取相關(guān)信息進(jìn)行集中
管理和存儲,根據用戶(hù)訪(fǎng)問(wèn)習慣,進(jìn)行數據的重組、拼裝,聚合,形成專(zhuān)題欄目;也可根據各專(zhuān)題的關(guān)注度,對推薦專(zhuān)題及相應的頁(yè)面表現位置進(jìn)行展示順序的自動(dòng)調整,供公眾訪(fǎng)問(wèn)。
?。ㄊ唬┲悄軉?wèn)答系統
(1)能夠深度挖掘網(wǎng)站群信息內容,建立和完善智能應答知識庫,可根據用戶(hù)自定義規則,通過(guò)信息聚合技術(shù),按照信息采集、聚合、挖掘和檢索流程,實(shí)現跨部門(mén)、跨行業(yè)的信息整合與資源共享。
(2)能夠自動(dòng)將咨詢(xún)問(wèn)題保存入庫,可自定義站點(diǎn)檢索到相關(guān)咨詢(xún)問(wèn)題,可實(shí)時(shí)預處理用戶(hù)的輸入信息,根據輸入內容與后臺檢索引擎交互,自動(dòng)糾錯,實(shí)時(shí)提示相關(guān)信息,引導類(lèi)似問(wèn)題進(jìn)行解答。
(3)可利用信息資源庫及應答知識庫中的信息,即時(shí)自動(dòng)回答用戶(hù)提出的問(wèn)題,向用戶(hù)展示相關(guān)度較高的信息。
(4)能夠充分使用站群內所有站點(diǎn)的信息資源,咨詢(xún)問(wèn)題答復內容可由平臺下多個(gè)站點(diǎn)信息數據組成關(guān)聯(lián)頁(yè)面提供給用戶(hù)。
(5)能夠實(shí)現多樣化展現方式,可以預分類(lèi)政務(wù)資源,將多個(gè)網(wǎng)站中的同類(lèi)欄目合并為一個(gè)分類(lèi),為用戶(hù)按分類(lèi)展現更全面精準的搜索結果。
(6)要求具備自學(xué)習功能,能夠自動(dòng)豐富知識庫,對于無(wú)法解決的問(wèn)題可自動(dòng)轉人工解答。
?。ㄊ┮苿?dòng)門(mén)戶(hù)系統
(1)要求采用HTML5網(wǎng)站頁(yè)面應自適應技術(shù),能夠實(shí)現不同移動(dòng)終端(例如蘋(píng)果、安卓系統) 訪(fǎng)問(wèn)移動(dòng)門(mén)戶(hù)時(shí)自適應展示,能夠在各種訪(fǎng)問(wèn)終端下保持完整良好的頁(yè)面布局和內容可讀性。
(2)要求移動(dòng)端與PC端使用同一域名進(jìn)行訪(fǎng)問(wèn),系統自動(dòng)識別訪(fǎng)問(wèn)終端并自適應頁(yè)面展示效果。
(3)要求移動(dòng)門(mén)戶(hù)所展示信息不再二次錄入,統一由站點(diǎn)內容管理系統提供,以保證數據來(lái)源的統一性。
(4)要求提供最新新聞、政務(wù)公開(kāi)、互動(dòng)交流、解讀回應、民意調查、輿論引導、政務(wù)服務(wù)、政府辦公等信息內容的展示。
(5)要求支持可定制欄目訪(fǎng)問(wèn)。
五、其他需求說(shuō)明
1.網(wǎng)站兼容性要求
要求網(wǎng)站頁(yè)面具有很好的兼容性,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
2.UI/UE設計
(1)界面設計需要突出地方特色
(2)文字,圖形色彩統一,搭配合理,界面清楚整潔,層次結構清楚。
(3)統一首頁(yè)和其他各級頁(yè)面的排版風(fēng)格。
(4)頁(yè)面富有時(shí)代氣息和美感,色彩搭配穩重、合理、大氣。
(5)多媒體、動(dòng)畫(huà)頁(yè)面要求豐富而生動(dòng)。
3.子站設計要求
(1)滿(mǎn)足各子站個(gè)性化頁(yè)面設計需求,根據各部門(mén)網(wǎng)站管理人員要求進(jìn)行設計與實(shí)施。
(2)本次頁(yè)面設計主要從以下幾個(gè)方面進(jìn)行規劃:頁(yè)面風(fēng)格、頁(yè)面人性化和易用性、頁(yè)面內容、頁(yè)面結構等,圍繞信息公開(kāi)、辦事服務(wù)、互動(dòng)交流等功能定位,設計門(mén)戶(hù)網(wǎng)站頁(yè)面框架,清晰、合理、科學(xué)展現網(wǎng)站內容,避免累贅和頁(yè)面冗余。
4.歷史數據遷移要求
(1)要求提出詳盡的網(wǎng)站數據遷移方案。
(2)要求將實(shí)施集約化的網(wǎng)站的全部數據,收錄
各站點(diǎn)欄目信息、新聞信息、公開(kāi)信息、互動(dòng)信息、用戶(hù)信息、用戶(hù)對應權限、圖片、附件、多媒體文件等數據平穩遷移至德陽(yáng)市政府網(wǎng)站集約化平臺,確保不丟失任何有效數據,處理好新網(wǎng)站欄目信息與歷史數據的對應關(guān)系。
(3)要求保證集約化網(wǎng)站切換的平滑過(guò)渡,做好數據的同步更新。
5.硬件及部署要求
投標人必須詳細列出項目的硬件需求,即政務(wù)云平臺虛擬機數量及資源參數,以及系統的部署方案。
六、項目實(shí)施、培訓
?。ㄒ唬╉椖靠⒐を炇找?br /> 按中華人民共和國現行項目建設規范和合同規定的驗收評定標準等要求進(jìn)行驗收。
根據施工進(jìn)度情況,按照標志性工作成果劃分,分期進(jìn)行檢查、驗收。
2.實(shí)施要求
投標人應具體說(shuō)明實(shí)施本項目擬采用方案,確保至少兩人駐場(chǎng)實(shí)施,團隊
組織方式和保障力量,中標單位實(shí)施過(guò)程中出現資源、速度、質(zhì)量協(xié)調控制不力、采購方有權更換責任人。
3.測試要求
投標供應商在實(shí)施過(guò)程中必須制定整體的測試方案,保證各子系統聯(lián)接正確,數據傳送正常。測試方案要明確測試關(guān)鍵點(diǎn),分單元測試、邊緣測試、整體測試等。測試方法應包括模塊測試、回歸測試、壓力測試、性能測試、功能測試、數據測試、安全測試、系統測試等。測試內容必須包括功能要求、可靠性、安全性、可擴充性、可維護性、平臺移植性、整體性能、與其他平臺接口等,系統試運行期不低于三個(gè)月。
4.驗收要求
投標供應商應負責在項目用戶(hù)驗收前將系統的全部相關(guān)的系統軟件,各階段開(kāi)發(fā)文檔,平臺及其他應用系統交互接口功能的源代碼和數據表結構,以及有關(guān)產(chǎn)品的系統說(shuō)明書(shū)、安裝手冊、維護手冊、技術(shù)文件、資料及安裝、測試、驗收報告等文檔匯集成冊交付項目單位。只有文檔齊全后方可組織驗收。對整個(gè)項目的驗收包括檢查整個(gè)系統是否實(shí)現了招標人所要求的功能,是否與投標供應商提出的解決方案中既定目標功能完全一致。
投標供應商必須根據系統總體設計方案提出驗收細則和驗收文檔清單(收錄
需求調研、系統分析、軟件設計、軟件開(kāi)發(fā)、系統測試、實(shí)施上線(xiàn)、運行維護等階段),招標人將根據驗收方案對系統每個(gè)部分逐一進(jìn)行項目驗收。
5.文檔要求
投標供應商提供的技術(shù)文件應該真實(shí)、全面、完整、詳細,應以中文書(shū)寫(xiě)。投標供應商提供的技術(shù)文件應是能滿(mǎn)足系統運行所需的安裝調試、操作使用及維護管理等的詳細技術(shù)資料。
投標供應商應負責在項目最終驗收時(shí)將系統從合同簽定之日起所有關(guān)于本項目的文檔資料(包括初步驗收文檔的版本更新和試運行期產(chǎn)生的文檔)交付采購人。
招標人認為必要的其他文檔。
?。ǘ┡嘤柍兄Z
供應商技術(shù)培訓及相關(guān)系統的基礎培訓,內容包括軟件安裝調試及初始化、使用等的基本操作培訓。供應商須制定出詳細完整的培訓方案,包括培訓的具體內容、培訓方式(現場(chǎng)培訓或集中培訓)、人數、教師、日程安排、資料等。應能使采購人相關(guān)人員獨立操作、維護、管理,確保系統能正常安全運行。
供應商應提供的詳細培訓方案必須包括:(1)集群管理員操作培訓;(2)各
部門(mén)管理員、應用軟件操作員等的基本操作培訓。
實(shí)際培訓時(shí)間和地點(diǎn)按中標人與采購人商定的為準。
七、售后服務(wù)技術(shù)需求
售后服務(wù)包括但不限于下列服務(wù):
1.網(wǎng)站頁(yè)面優(yōu)化服務(wù)
(1)網(wǎng)站信息維護培訓指導。包括網(wǎng)站信息的增、刪、查、改等操作的指導和問(wèn)題解答;添加圖片及附件操作指導;網(wǎng)站靜態(tài)頁(yè)面生成等操作指導。
(2)網(wǎng)站頁(yè)面的圖片、文字排版和調整。包括網(wǎng)頁(yè)圖片的制作、更換、布局調整,文字的內容、格式、鏈接等的修改。
(3)保證網(wǎng)站頁(yè)面顯示正常。解決文字或圖片內容撐出、內容不顯示或顯示不正確、頁(yè)面文字出現亂碼、頁(yè)面出現錯誤報告、頁(yè)面在有的瀏覽器上顯示不正確、頁(yè)面沒(méi)有找到、網(wǎng)頁(yè)不能訪(fǎng)問(wèn)等問(wèn)題。
2. 網(wǎng)站內容管理平臺及選件維護服務(wù)
(1)對國家及省政府最新要求的響應
及時(shí)響應國家及省政府對政府門(mén)戶(hù)網(wǎng)站、集約化建設及互聯(lián)網(wǎng)+政務(wù)服務(wù)相關(guān)內容的建設要求,對門(mén)戶(hù)網(wǎng)站前臺服務(wù)內容進(jìn)行調整。
(2)模版維護服務(wù)
每月一次。包括:定期對現有網(wǎng)站巡檢,對現有的模版存在的不足進(jìn)行調優(yōu),如排版不合適、格式不統一、色調不一致、內容塊錯位、字體大小不一致、文字沒(méi)對齊等情況,但不涉及到頁(yè)面新的風(fēng)格。對現有的模版調整,包括添加刪除專(zhuān)題鏈接、頁(yè)面局部細節樣式調整,錯字,錯鏈,圖標替換等,提交《網(wǎng)站模版優(yōu)化記錄》。
(3)常規檢查維護
每月一次。包括:各服務(wù)器運行狀況、存儲空間狀況、軟件運行狀況、備份系統狀況等。并提出現有問(wèn)題和解決方法,并提交《網(wǎng)站常規檢查維護運行狀況報告》。
(4)專(zhuān)題維護
根據用戶(hù)需求提供專(zhuān)題制作協(xié)助服務(wù)。
(5)產(chǎn)品版本升級
不定期提供。主要幫助客戶(hù)不斷完善產(chǎn)品的功能和系統穩定性。每次升級要對升級的版本、工作做好日志記錄,并提交《版本升級記錄表》。
3、技術(shù)運維服務(wù)
(1)備份服務(wù)
對門(mén)戶(hù)網(wǎng)站系統涉及到的內容進(jìn)行備份,包括數據庫每天備份、網(wǎng)站應用程
序備份、網(wǎng)站所有補丁備份、項目涉及到的文檔進(jìn)行備份等。提交《系統備份檢查表》,內容包括備份聯(lián)系人、聯(lián)系電話(huà)、時(shí)間、路徑、內容等。
(2)錯誤日志分析
對網(wǎng)站涉及到的所有日志(包括中間件等產(chǎn)品)記錄要進(jìn)行定期查看,找出錯誤內容。提交《日志錯誤分析表》。
4、服務(wù)質(zhì)量要求
(1)質(zhì)量保證期限及費用
系統驗收合格、雙方簽署驗收書(shū)之日起,為本次建設內容中的子站提供至少1年維保服務(wù)。在系統維護期內,開(kāi)發(fā)的軟件應提供免費升級服務(wù)。維保服務(wù)到期后,應承諾對系統的升級僅收取成本費。
(2)售后服務(wù)方案
中標人需要提供詳細的售后服務(wù)方案,包括服務(wù)人員、措施、應急預案及相關(guān)流程等內容。在安裝、調試及系統免費維護期內,必須提供系統故障的應急處理方案。承諾所投產(chǎn)品系統不存在“后門(mén)”問(wèn)題。
(3)服務(wù)響應要求
中標人承諾提供現場(chǎng)服務(wù)人員,且能夠提供7*24小時(shí)響應服務(wù),一般問(wèn)題30分鐘之內解決,重大問(wèn)題4小時(shí)內解決。
說(shuō)明:
1、歡迎供應商提供服務(wù)保障等于或高于該基本要求的服務(wù)。
2、本章的要求不能作為資格性條件要求評標,如存在資格性條件要求,應當認定招標文件編制存在重大缺陷,評標委員會(huì )應當停止評標。 查看全部
解決方案:labview100個(gè)實(shí)例之簡(jiǎn)單采集(2)
目錄
提示:文章寫(xiě)完后,目錄可以
前言
之前做過(guò)一個(gè)很簡(jiǎn)單的程序,但總覺(jué)得不能體現labview真正的特點(diǎn),所以打算做一個(gè)系列,讓一些初學(xué)者容易理解這些。首先是模塊化和功能封裝的概念。
1.例子
這是一個(gè)完整的主程序框圖,可以清楚的看到分為兩大區域——“參數”設置區和“主界面”。主界面收錄
四個(gè)區域,分別是修改頻率較高的參數區、控制區(啟停)、狀態(tài)區和顯示區。用于采集一段時(shí)間內的聲音和電流信號。

運行效果為:
設置采集條件和數據存儲路徑,通過(guò)按鈕控制采集的開(kāi)始,程序按照指定的采樣率采集一段時(shí)間的信號并保存時(shí)域數據(原創(chuàng )
數據,方便后期數據處理)。如果可能,你可以嘗試運行一下來(lái)測試一下效果。
模塊化與功能封裝.zip-MCU文檔資源-CSDN文庫
2. 模塊化與功能封裝 1. 模塊化
Labview的一大特點(diǎn)是程序往往以模塊化的方式構建,也就是常說(shuō)的子VI。
2.功能封裝

如圖所示,此時(shí)我們說(shuō)這個(gè)程序使用了三個(gè)子VI,分別封裝了采集、回放、存儲三個(gè)功能。
在制作子VI時(shí),需要明確需要封裝的函數,輸入輸出的數據類(lèi)型。在保證通用性的前提下,主程序框圖應該是最簡(jiǎn)潔的。
總結
本例主要是簡(jiǎn)單說(shuō)明Labview中子VI的功能以及函數封裝的方便性。當我們創(chuàng )建一個(gè)子VI并賦予它特定的功能時(shí),我們可以很方便地在項目的任何地方調用它,而不需要再次編輯重復的代碼。
特別注意的是,當一個(gè)子VI被我們封裝后,理論上我們可以直接在本程序中調用。但往往在一個(gè)大型項目中,一些子VI因為其功能而被頻繁使用,我們需要考慮是否要重復調用它們。重復調用是指我們在某個(gè)時(shí)間多次調用同一個(gè)子VI,程序會(huì )等待并逐次執行每次調用,導致程序運行時(shí)間發(fā)生變化甚至數據沖突(因為一般一個(gè)子VI計算機只分配一塊內存空間 同時(shí)調用時(shí),我們不知道誰(shuí)先調用并輸出結果)。
我們可以在VI的屬性——“執行”欄中將VI設置為可重入VI。這樣,程序運行時(shí),當在多個(gè)地方同時(shí)調用這個(gè)VI時(shí),會(huì )創(chuàng )建不同的工作區,多個(gè)調用者的數據會(huì )分別存儲,不會(huì )發(fā)生沖突和干擾。
★ 范例中提到的結構、文件、信號處理和信號分析的范例版本及后續計劃為17版本,如需降級請及時(shí)聯(lián)系我們。
解決方案:采購內容及技術(shù)要求
一、采購要求
一、項目建設背景
政府網(wǎng)站是現代政府在信息化條件下政府密切聯(lián)系人民群眾的重要橋梁,是網(wǎng)絡(luò )時(shí)代政府履行職責的重要平臺,是各級政府機關(guān)提供信息公開(kāi)、回應關(guān)切、辦事服務(wù)、互動(dòng)交流的重要載體。近年來(lái),黨中央、國務(wù)院、四川省政府高度重視政府網(wǎng)站建設和管理工作,先后下發(fā)了多項關(guān)于加強政府網(wǎng)站建設的管理規定。從2015年4月起,國務(wù)院開(kāi)展了全國政府網(wǎng)站普查工作,對政府網(wǎng)站的建設起到了前所未有的推動(dòng)作用。
2017年5月,《國務(wù)院辦公廳關(guān)于印發(fā)政府網(wǎng)站發(fā)展指引的通知》(國辦發(fā)〔2017〕47號)發(fā)布,對政府網(wǎng)站集約化建設提出了詳細的建設要求。德陽(yáng)市政府網(wǎng)站集約化建設項目將以此為依據,并根據《四川省人民政府辦公廳關(guān)于加強政府網(wǎng)站信息內容建設的實(shí)施意見(jiàn)》(川辦發(fā)〔2015〕53號)和《德陽(yáng)市人民政府辦公室關(guān)于進(jìn)一步做好“互聯(lián)網(wǎng)+政務(wù)服務(wù)”有關(guān)工作的通知》(德辦函〔2016〕99號)以及政府網(wǎng)站績(jì)效考核的要求,以問(wèn)題和需求為導向,以為民服務(wù)為根本宗旨,順應公眾的期盼,按照利企便民的原則,樹(shù)立“以信息公開(kāi)為基礎、公共服務(wù)為核心”的理念,積極推進(jìn)政府網(wǎng)站集約化平臺建設、應用新技術(shù)拓展服務(wù)渠道,以增強網(wǎng)站用戶(hù)體驗、提高辦事服務(wù)、實(shí)現信息共享,為公眾提供優(yōu)質(zhì)、便捷、高效服務(wù)。
二、項目建設目標
根據國家和四川省政府網(wǎng)站績(jì)效考核指標及其他相關(guān)政策文件中對“互聯(lián)網(wǎng)+”環(huán)境下政府網(wǎng)站的定位,借鑒國內外領(lǐng)先政府網(wǎng)站的先進(jìn)經(jīng)驗和趨勢特點(diǎn),以“技術(shù)先進(jìn)、功能完備、服務(wù)智能、安全穩定”為建設原則,著(zhù)重新技術(shù)應用,基于大數據平臺,采用移動(dòng)互聯(lián)網(wǎng)等技術(shù)手段,建設德陽(yáng)智慧型、實(shí)用化、個(gè)性化、集約化網(wǎng)站群管理平臺,最終實(shí)現德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站、40個(gè)市級部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)、6個(gè)縣(市、區)政府門(mén)戶(hù)網(wǎng)站的集約化建設工作。建設總體目標如下:
?。? 加強信息資源整合,搭建全市統一的政府網(wǎng)站信息資源庫,有效管理全市政府網(wǎng)站信息資源。
?。? 建立信息支撐體系,提供網(wǎng)站信息采集技術(shù),豐富網(wǎng)站信息供給手段。能夠通過(guò)集約化平臺集中實(shí)現采集、發(fā)布信息和數據,實(shí)現主站與子站、子站與子站、子站與欄目和市級部門(mén)子站與縣級部門(mén)專(zhuān)欄等之間的互聯(lián)互通、信息復用,為信息公開(kāi)提供平臺支撐,充分發(fā)揮政府網(wǎng)站在政務(wù)公開(kāi)中第一平臺的作用。
?。? 加強網(wǎng)站智能化建設,提供智能搜索、智能問(wèn)答、智能推薦和無(wú)障礙訪(fǎng)問(wèn)等功能??筛鶕脩?hù)需求調整搜索排序、聚合相關(guān)服務(wù)等,實(shí)現“搜索即服務(wù)”。主動(dòng)為社會(huì )公眾提供智能、實(shí)用、便捷、精準、高效的網(wǎng)站服務(wù),提升政府網(wǎng)站的公共服務(wù)能力和水平。
?。? 建立健全網(wǎng)站內容保障監管體系,加強網(wǎng)站的運維、監管手段,提供切實(shí)有效的網(wǎng)站運維、監管能力,及時(shí)發(fā)現網(wǎng)站存在的問(wèn)題。保證網(wǎng)站運行安全、穩定,服務(wù)內容全面、準確。
?。? 提供統一、完善的網(wǎng)站互動(dòng)交流功能,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。
6. 注重政務(wù)微博、微信等互聯(lián)網(wǎng)新技術(shù)的應用,加強對移動(dòng)終端應用功能的支持,豐富公眾訪(fǎng)問(wèn)渠道,有效提高用戶(hù)體驗。
7.能夠通過(guò)“深度鏈接”、各類(lèi)接口整合等方式,實(shí)現全市統一的辦事服務(wù)入口和數據開(kāi)放入口;與有效與四川省政府信息公開(kāi)目錄管理系統、四川省一體化政務(wù)服務(wù)平臺、德陽(yáng)市政務(wù)信息資源共享平臺等進(jìn)行整合和對接,最終實(shí)現平臺互聯(lián)互通、信息資源共享。
8.圍繞2018年國家和四川省政府網(wǎng)站績(jì)效評估指標體系,對網(wǎng)站建設進(jìn)行升級優(yōu)化,提升德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站排名,力爭進(jìn)入省內前10名;加強網(wǎng)站建設的方向性引導、有效激勵服務(wù)改進(jìn)措施,保障網(wǎng)站持續發(fā)展。
三、總體技術(shù)要求
?。ㄒ唬┸浖a(chǎn)品技術(shù)要求
1.本次項目的投標商必須采用先進(jìn)且成熟的技術(shù)和產(chǎn)品,主要產(chǎn)品應具有云平臺部署成功案例。
2.軟件產(chǎn)品應具有網(wǎng)站集群化平臺建設能力。
3.系統需支持大量用戶(hù)訪(fǎng)問(wèn)和海量數據的存儲、檢索和管理,平臺功能部署靈活統一。
4.產(chǎn)品具有安全、可優(yōu)化、可擴展性能,易于二次開(kāi)發(fā),應免費提供接口。
5.系統應采用J2EE或其他符合行業(yè)發(fā)展方向的先進(jìn)技術(shù)架構;
6.系統應用結構體系的表示層、業(yè)務(wù)層、數據層、訪(fǎng)問(wèn)層應分開(kāi),支持分布式部署,支持無(wú)限站點(diǎn)擴展;
7.系統應支持Oracle、MySQL、Microsoft SQL Server等主流數據庫系統和主要國產(chǎn)化數據庫系統;
8.網(wǎng)站系統兼容性強,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
9.系統支持雙機熱備部署模式。
?。ǘ┻\行性能指標
1. 在網(wǎng)絡(luò )穩定的環(huán)境下,系統后臺單一操作的響應時(shí)間小于3秒;網(wǎng)站頁(yè)面訪(fǎng)問(wèn)響應時(shí)間小于1秒。
2. 網(wǎng)站滿(mǎn)足并發(fā)訪(fǎng)問(wèn)用戶(hù)數不低于10000的訪(fǎng)問(wèn)請求。
3. 支持初始數據量不少于100萬(wàn)記錄數,支持表空間自動(dòng)擴充。
4. 系統能夠實(shí)現滿(mǎn)足網(wǎng)站面向服務(wù)的目標,最終實(shí)現服務(wù)化、構件化、松耦合的SOA體系架構。
5. 系統提供7×24小時(shí)的連續運行,平均系統年故障時(shí)間≤2個(gè)小時(shí),平均故障修復時(shí)間≤30分鐘。
6. 網(wǎng)頁(yè)代碼和標記設計盡可能簡(jiǎn)化,以節約帶寬。
7. 網(wǎng)站要提供不間斷服務(wù),支持信息多個(gè)站點(diǎn)同時(shí)發(fā)布功能,單個(gè)站點(diǎn)故障或更新維護等不能影響其它站點(diǎn)的正常使用。
?。ㄈ┌踩阅芤?br /> 1. 系統應支持分布式部署,系統應支持靜態(tài)頁(yè)面發(fā)布。
2. 系統應建立基于角色和工作分工的權限控制機制,重要信息需具備有效的加密方式進(jìn)行傳遞;系統應提供數據自動(dòng)非本機轉儲備份和故障恢復等應急響應功能,具備完善的日志記錄、審計和數據備份功能。
3. 具備良好的數據庫安全策略。系統安全設計符合《計算機信息系統安全保護等級劃分準則》(GB17859-1999)第三級(安全標記保護級)要求。
四、建設內容及功能性需求
此次項目招標主要目的是規劃、搭建好德陽(yáng)市政府網(wǎng)站集約化平臺,并完成“中國·德陽(yáng)”網(wǎng)的改版和40個(gè)市級政府部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)的集約化建設,但不包括德陽(yáng)市6縣(市、區)政府門(mén)戶(hù)網(wǎng)站集約化建設內容。德陽(yáng)市政府網(wǎng)站集約化平臺將部署在德陽(yáng)市政務(wù)云上。具體建設內容如下:
?。ㄒ唬┙y一用戶(hù)管理系統
將德陽(yáng)市使用站群系統的所有用戶(hù)統一管理起來(lái),實(shí)現用戶(hù)的屬性管理,并將用戶(hù)與組織機構相關(guān)聯(lián)。
用戶(hù)管理,提供對用戶(hù)的增、刪、改,可禁用和啟用用戶(hù)帳號,設置用戶(hù)擁有的功能權限;可自定義用戶(hù)組織架構;用戶(hù)組管理,提供對用戶(hù)組的增、刪、改,設置用戶(hù)組擁有的功能權限。
?。ǘ┬畔①Y源庫系統
以整合德陽(yáng)市所有政府網(wǎng)站資源實(shí)現共享為目標,建設集約化網(wǎng)站信息資源庫,實(shí)現對信息資源的統一分類(lèi)、統一展現、統一監管及各模塊之間的無(wú)縫調用,有效解決平臺建設資源共享的問(wèn)題。
1. 要求針對信息資源庫建設提出相應的解決方案和產(chǎn)品,滿(mǎn)足結構化和非結構化數據的數據庫建設。
2. 要求系統提供標準管理體系,即涵蓋已經(jīng)發(fā)布的國家標準、企業(yè)標準、行業(yè)標準和地方標準,也可以管理系統自定義的數據字典。
3. 要求系統具有資源庫管理,數據元管理,數據集管理,表單管理等數據庫基礎應用組件。
4. 要求系統提供分類(lèi)管理能力,分類(lèi)管理包括數據元分類(lèi)管理,數據分類(lèi)管理。
5. 要求系統提供資源管理能力,系統提供基本的數據錄入功能,也可以使用數據交換平臺,通過(guò)WebService或ETL工具進(jìn)行數據交換。
6. 要求系統提供共享管理能力,包括:自定義分組管理,共享維護,共享授權。共享授權實(shí)現數據分級管理,可以對用戶(hù)授權,也可以對分組授權。
7. 要求系統提供系統管理能力,包括用戶(hù)管理,角色管理,授權管理,日志管理。
?。ㄈ┘s化網(wǎng)站監管平臺
以“統一標準體系、統一技術(shù)平臺、統一安全防護、統一運維監管,集中管理信息數據,集中提供內容服務(wù)”為目標,結合網(wǎng)站屬地化管理體系,建設德陽(yáng)市政府網(wǎng)站集約化管理平臺,實(shí)現站點(diǎn)管理、規范性檢查、網(wǎng)站普查指標自檢、網(wǎng)站訪(fǎng)問(wèn)監控、網(wǎng)站維護監控、網(wǎng)站運行監控等功能,滿(mǎn)足網(wǎng)站集約化統一管理要求。具體功能如下:
1.站點(diǎn)監管
(1)提供站群系統內各子站基本信息管理功能,包括管理的站點(diǎn)名稱(chēng)、站點(diǎn)域名、站點(diǎn)描述信息、主辦單位及聯(lián)系人信息、網(wǎng)站備案信息等。
(2)按照《政府網(wǎng)站發(fā)展指引》要求提供各項網(wǎng)站規范性的監測功能,包括名稱(chēng)規范、域名規范、備案信息規范、模板規范、標簽規范、欄目規范等一致性檢查、冗余檢查、屬地化監測等。
2.網(wǎng)站普查指標監測
根據網(wǎng)站普查要求,提供網(wǎng)站指標監測功能,包括網(wǎng)站可用性監測、存在錯誤頁(yè)面分析、頁(yè)面關(guān)聯(lián)分析、空白欄目監測、欄目更新頻率監測、網(wǎng)站外鏈監測、敏感詞及錯別字掃描等。
3.網(wǎng)站訪(fǎng)問(wèn)監測
根據網(wǎng)站實(shí)際運行情況,可數字化或圖表化展現網(wǎng)站運行監控的各項訪(fǎng)問(wèn)指標,可對指定時(shí)間段的訪(fǎng)問(wèn)情況進(jìn)行統計、分析,并能生成統計分析報告(表)進(jìn)行打印或導出。監測功能及內容如下:
(1)搜索引擎監控:包括訪(fǎng)問(wèn)人次、站內搜索次數、搜索結果點(diǎn)擊次數、搜索結果點(diǎn)擊率、搜索引擎排行、網(wǎng)站檢索詞排行等。
(2)網(wǎng)站訪(fǎng)問(wèn)監控:包括訪(fǎng)問(wèn)渠道、瀏覽量、訪(fǎng)客數、平均停留時(shí)間、日訪(fǎng)問(wèn)變化趨勢圖等;
(3)瀏覽頁(yè)數性能監控:包括系統連接時(shí)間、響應時(shí)間、下載時(shí)間以及無(wú)法訪(fǎng)問(wèn)次數等;
(4)智能報警策略:包括故障的持續時(shí)間、問(wèn)題嚴重性分級、分類(lèi)報警,報警通知方式支持郵件、短信等。
4.網(wǎng)站維護監測
(1)針對網(wǎng)站內容管理進(jìn)行數據分析,包括網(wǎng)站欄目(欄目訪(fǎng)問(wèn)量、欄目信息量、欄目參與部門(mén)數和欄目參與人員數等)、部門(mén)信息(部門(mén)信息發(fā)布量、部門(mén)業(yè)務(wù)辦理量和部門(mén)業(yè)務(wù)辦結率等)和公共訴求(訴求目的、訴求內容分類(lèi)、處理單位、滿(mǎn)意度等)等數據的統計分析功能。
(2)提供系統站內通知功能,可對系統內各用戶(hù)發(fā)送消息,解決系統管理人員日常工作溝通及信息共享。
5.網(wǎng)站運行檢測
(1)支持對服務(wù)器硬件層進(jìn)行監控,包括服務(wù)器的工作狀態(tài)、處理器、內存、進(jìn)程等。
(2)提供靈活、全面、便捷的監控方式,監管頁(yè)面秒級刷新,運行高效、安全可靠。
6.系統日志管理
提供系統日志的管理界面,能詳細記錄系統操作日志,并形成日志信息或日志文件,可對日志文件進(jìn)行導出。
?。ㄋ模┚W(wǎng)站群管理平臺
以站點(diǎn)管理為重點(diǎn),支持集中式建設部署和分布式管理維護。
支持對歷史信息的調入、調出,提供對信息的全流程跟蹤管理。
支持與其它平臺的無(wú)縫對接。系統接口可開(kāi)放,支持網(wǎng)站擴展功能模塊的安裝調試,具有高集成、可擴展、易管理等特性。
采用XML、WebService等標準,提供組件化的統一數據接口,有效實(shí)現信息的采集、聚合。
1.站群管理系統
(1)要求實(shí)現頁(yè)面展現與信息分離,刪除或修改網(wǎng)頁(yè)模板時(shí)不會(huì )對信息造成影響。
(2)站群管理系統支持站群下所有子站點(diǎn)的創(chuàng )建、修改、暫停、刪除及服務(wù)器資源配置。
(3)系統提供多級授權分層管理機制,每個(gè)子站點(diǎn)都提供獨立的站點(diǎn)管理功能,站點(diǎn)管理人員能夠對子站點(diǎn)進(jìn)行角色權限管理、資源管理、用戶(hù)權限管理及站點(diǎn)統計等操作,保證用戶(hù)在統一的平臺下獨立管理自己的子站點(diǎn)。
(4)站群系統內各站點(diǎn)之間可以共享數據源,保證各站點(diǎn)信息的一致性。
(5)系統支持密碼強度管理、CA綁定等安全策略。
2.站點(diǎn)管理系統
(1)網(wǎng)站信息的發(fā)布具有靜態(tài)信息發(fā)布和動(dòng)態(tài)信息發(fā)布相結合的發(fā)布模式,用戶(hù)可根據實(shí)際需要選擇發(fā)布方式,以同時(shí)滿(mǎn)足網(wǎng)站訪(fǎng)問(wèn)速度、并發(fā)訪(fǎng)問(wèn)量及網(wǎng)站交互功能的多重需求。
(2)系統支持對多種信息格式的發(fā)布,包括音頻、視頻等多媒體格式。
(3)系統支持增量發(fā)布與完全發(fā)布,支持定時(shí)發(fā)布和立即發(fā)布,可根據需要自定義發(fā)布方式。

(4)系統提供統一用戶(hù)驗證功能,通過(guò)賬號、密碼、驗證碼相結合的方式登陸到系統管理界面。
(5)內容維護人員只能對自己權限范圍內的內容進(jìn)行管理,無(wú)權看到并操作其他用戶(hù)管理的內容。
(6)系統詳細記錄所有用戶(hù)的系統操作,以便于查詢(xún)和管理。
(7)系統提供權限組功能,具有相同權限的用戶(hù)可劃分為同一權限組。權限的分配可以詳細到每一個(gè)欄目。
(8)提供系統登陸賬號長(cháng)時(shí)間無(wú)操作的自動(dòng)注銷(xiāo)功能,可自行設置注銷(xiāo)時(shí)間。
(9)系統可根據自定義備份策略(如異地備份、定時(shí)備份等)進(jìn)行站點(diǎn)數據備份,能對備份文件進(jìn)行刪除、下載、恢復管理。
3.內容管理系統
(1)具有網(wǎng)站內容采集、在線(xiàn)編輯、審核發(fā)布、敏感詞過(guò)濾、錯別字檢測等功能,提供可視化編輯器,實(shí)現“所見(jiàn)即所得”的信息錄入、編輯效果。
(2)支持文檔錄入、發(fā)布、預覽、修改、刪除等操作,擁有豐富的文檔引用、復制、鏈接、移動(dòng)、同步等操作功能。
(3)內容編輯器具有多圖片上傳、word和pdf等文檔導入、一鍵排版、格式清理、去除空行、首行縮進(jìn)等常用功能;
(4)各子站點(diǎn)具有獨立、完善的信息采集、編發(fā)功能,可根據用戶(hù)權限進(jìn)行跨欄目、跨站點(diǎn)信息推送與共享。
(5)支持信息發(fā)布過(guò)程中的多級審核管理,能夠針對不同站點(diǎn)、不同欄目設置不同審核流程;
(6)支持前臺頁(yè)面樣式由模板進(jìn)行控制,模板提供代碼級修改,模板管理支持標簽語(yǔ)法,模板可嵌套模板,也可嵌套標簽;
(7)網(wǎng)站欄目能夠自由移動(dòng),可定制欄目信息發(fā)布類(lèi)型,可按權限獲取不同欄目、不同站點(diǎn)(如內容管理系統、信息公開(kāi)系統)的信息;
(8)信息錄入具備文章、組圖、鏈接、視頻四種類(lèi)型,能夠對普通文本、圖
片信息和音視頻等多種流媒體信息進(jìn)行發(fā)布和管理,滿(mǎn)足信息多樣化的需求;
(9)支持站點(diǎn)發(fā)布、分級欄目發(fā)布、信息單獨發(fā)布等操作,并可以指定文檔發(fā)布后在頁(yè)面顯示的順序;
(10)支持靜態(tài)發(fā)布、動(dòng)態(tài)發(fā)布和動(dòng)態(tài)靜態(tài)相結合的發(fā)布方式。
?。ㄎ澹┱畔⒐_(kāi)管理系統
根據部門(mén)業(yè)務(wù)和網(wǎng)站功能特點(diǎn)進(jìn)行科學(xué)分析、認真梳理,合理規劃頻道和欄目,與四川省政府信息公開(kāi)目錄管理系統進(jìn)行數據對接,有效實(shí)現德陽(yáng)市政府信息公開(kāi)數據在網(wǎng)站上的聚類(lèi)、共享、展示。
(1)該系統必須完全符合《政府信息公開(kāi)目錄系統實(shí)施指引(試行)》(國辦秘函[2009]6號)文件中的各項要求。
(2)要求系統提供靈活的元數據管理,以能適應不同類(lèi)型的信息記錄需要,元數據必需符合國家相關(guān)文件的要求,并具備元數據擴展功能;提供對多種類(lèi)型的元數據字段支持。定義數據層、功能層、使用層規范,同時(shí)配以編碼規則管理,支持批量修改,保持良好的擴展性;
(3)要求系統提供靈活的分類(lèi)管理,可自由地將采集到的信息進(jìn)行多渠道分類(lèi),包括主題分類(lèi)、機構分類(lèi)、體裁分類(lèi)及服務(wù)對象分類(lèi)。同時(shí)支持分類(lèi)的自由擴展。
(4)要求系統提供靈活的目錄管理功能,用戶(hù)可根據公眾的需要定義目錄的展現內容,通過(guò)定義目錄節點(diǎn)的生成規則,從而來(lái)獲取相應的數據,形成最終的人性化目錄;系統支持目錄推薦功能,即上級政府建立完成的目錄,可以作為“模板”推薦給下級單位。
(5)要求系統能夠自定義索引號編碼規則,依照信息公開(kāi)標準對信息進(jìn)行自動(dòng)編碼,生成信息索引號。當編碼規則發(fā)生修改時(shí),也可制定新規則,并批量修改信息索引號。
(6)要求系統提供良好的信息管理功能,從采集、標引、審核、發(fā)布到歸檔,完整記錄信息生命周期活動(dòng)。
(7)系統提供列表、簡(jiǎn)要、細覽等展現形式,顯示核心元數據,包括索引號、名稱(chēng)、內容概述、生成日期、文號等。
(8)系統應滿(mǎn)足信息錄入和審核權限的逐級分配,強化信息源頭管理,保障信息發(fā)布安全。
(9)系統具有依申請公開(kāi)功能,可對依申請公開(kāi)信息進(jìn)行接收、受理、審核、發(fā)布,并提供統計分析等功能,訪(fǎng)問(wèn)用戶(hù)可實(shí)時(shí)查詢(xún)依申請公開(kāi)處理狀態(tài)。
(10)要求系統提供綜合的績(jì)效評估模式,包括信息公開(kāi)工作量評估、依申
請公開(kāi)辦結率和辦結質(zhì)量評估。
?。┗?dòng)交流系統
系統嚴格遵循SOA模塊化設計思想,按照“高內聚,低耦合”原則,提供全面完善的網(wǎng)站互動(dòng)交流功能,包括領(lǐng)導信箱、民意征集、在線(xiàn)調查、咨詢(xún)投訴、網(wǎng)上信訪(fǎng)、在線(xiàn)訪(fǎng)談等,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。具體功能要求如下:
1.在線(xiàn)訪(fǎng)談系統
(1)支持圖文和視頻同步的在線(xiàn)訪(fǎng)談,要求具有文字直播、圖片直播、音頻直播及視頻直播四種功能形式;
(2)要求提供良好的人機對話(huà)界面,網(wǎng)友通過(guò)文字形式可實(shí)時(shí)提問(wèn),管理人員采集
和審核問(wèn)題,主持人轉達和引導提問(wèn),嘉賓對問(wèn)題實(shí)時(shí)解答;
(3)管理員可查看在線(xiàn)用戶(hù)情況,可以通過(guò)IP或用戶(hù)名來(lái)禁止用戶(hù)行為,可對用戶(hù)發(fā)言?xún)热菰O置過(guò)濾模式。
(4)主持人、嘉賓與網(wǎng)友的發(fā)言區要劃分明確;
(5)系統必須具有訪(fǎng)談預告功能,訪(fǎng)談預告可采用文字、圖片或視頻方式展示訪(fǎng)談背景和相關(guān)資料。
(6)訪(fǎng)談過(guò)程中要確保文字、圖片、音頻、視頻的流暢;
(7)對于歷史訪(fǎng)談,可按照日期進(jìn)行歸檔,形成歷史訪(fǎng)談目錄,網(wǎng)友可調閱歷史訪(fǎng)談。
(8)對于已經(jīng)完成的訪(fǎng)談,管理員可繼續對訪(fǎng)談內容進(jìn)行修改和編輯。
2.領(lǐng)導信箱系統
(1)系統具有工作流管理功能,可自定義信件辦理流程,實(shí)現從受理、轉辦、承辦、退回、辦結的全流程管理。
(2)系統具有信件辦理狀態(tài)實(shí)時(shí)查詢(xún)功能,來(lái)信人可根據信件編碼、姓名、聯(lián)系電話(huà)等對信件辦理狀態(tài)進(jìn)行查詢(xún),信箱管理人員可通過(guò)關(guān)鍵字、信件編碼、時(shí)間、部門(mén)、信件狀態(tài)等條件進(jìn)行查詢(xún)。
(3)前臺提供“信件選登”、“信件查詢(xún)”、“我要寫(xiě)信”等功能,寫(xiě)信內容需收錄
姓名、昵稱(chēng)、身份證號碼、聯(lián)系電話(huà)、電子郵件、信件標題、信件內容,可上傳附件材料等,具有詳實(shí)的展現形式,可對敏感詞進(jìn)行自動(dòng)屏蔽。
(4)后臺提供信件的回復、發(fā)布、選登等狀態(tài)的查看及信件辦理狀態(tài)的統計功能,提供信件的“公開(kāi)/不公開(kāi)”選項功能。
3.意見(jiàn)征集系統
(1)針對社會(huì )公眾關(guān)注的熱點(diǎn)問(wèn)題或者政策制定和工作成果開(kāi)展民意征集活動(dòng),民意征集的各個(gè)主題要求布局清晰、合理,方便閱覽;
(2)網(wǎng)友可根據征集主題的內容和背景資料發(fā)表自己的建議和觀(guān)點(diǎn),可以查看征集結果;
(3)系統后臺可實(shí)時(shí)查看所有社會(huì )公眾提交的意見(jiàn)和建議;
(4)意見(jiàn)征集結束后,前臺只保留征集主題、內容、結果,網(wǎng)友不能再進(jìn)行意見(jiàn)和建議的提交;
(5)能對網(wǎng)友發(fā)表的文字信息進(jìn)行安全性檢查。
4.網(wǎng)上調查系統
(1)管理員可根據不同的調查內容新建、修改、刪除調查問(wèn)卷。對于每個(gè)調查問(wèn)卷可以對標題、摘要、內容、選項、調查項組成結構等進(jìn)行管理,可靈活設計投票問(wèn)卷風(fēng)格;
(2)同一調查主題,可設置多個(gè)調查項;調查項應包括單選項調查、多選項調查、附加選項(填空)等調查類(lèi)型;
(3)同一IP地址在設定時(shí)間內只允許提交一次投票,杜絕惡意投票行為發(fā)生;
(4)投票結果可通過(guò)表格、柱狀圖、餅圖等形式進(jìn)行展現。
?。ㄆ撸祿杉到y
(1)數據采集系統借助先進(jìn)的信息抓取、信息分類(lèi)和信息流轉技術(shù),實(shí)現對指定網(wǎng)站信息(包括但不限于中央政府網(wǎng)站、省政府網(wǎng)站、重要新聞網(wǎng)站和平臺內外所需政府信息資源)的更新監測和有效采集。
(2)系統按照不同需要,可定點(diǎn)、定時(shí)監測和采集所需信息,并下載信息的圖片、視頻及附件等相關(guān)文件,將采集信息進(jìn)行準確分類(lèi)、整理、篩選,通過(guò)內容推送功能自動(dòng)推送到指定欄目。
(3)管理員可在后臺設置抓取的范圍、關(guān)鍵字、抓取時(shí)間等參數,系統根據設置好的抓取策略進(jìn)行信息自動(dòng)抓取。
(4)用戶(hù)可對采集到的信息按照日期、來(lái)源、標題進(jìn)行檢索、瀏覽;可以對信息內容與圖片分類(lèi)保存,支持信息分類(lèi)的自定義。
(5)系統支持將網(wǎng)頁(yè)中的信息內容按標題、作者、欄目、內容等進(jìn)行提??;自動(dòng)過(guò)濾網(wǎng)頁(yè)中的無(wú)用信息、廣告圖片等,自動(dòng)過(guò)濾重復的信息。
(6)對采集的信息可進(jìn)行二次編輯、審核,可向網(wǎng)站群內各個(gè)子站欄目進(jìn)行發(fā)布。
?。ò耍o(wú)障礙瀏覽系統
(1)面向聽(tīng)力、視力等有障礙的特殊人群提供縮放字體、縮放頁(yè)面、輔助光標、文本化網(wǎng)頁(yè)和語(yǔ)音個(gè)性化調整等輔助瀏覽功能。
(2)具有全程自動(dòng)語(yǔ)音提示、全程語(yǔ)音導航交互、光標語(yǔ)音指讀與連讀、文
字放大閱讀專(zhuān)用屏、網(wǎng)頁(yè)圖文放大縮小、高對比閱讀配色器、閱讀輔助光標等功能。
(3)系統需界面友好、易操作,無(wú)需安裝插件,支持各種主流瀏覽器。
?。ň牛┲悄軝z索系統
(1)提供專(zhuān)業(yè)的政府網(wǎng)站檢索功能,對政府網(wǎng)站檢索進(jìn)行分類(lèi)引導,按照政策法規、辦事事項、政府文件、新聞咨詢(xún)等類(lèi)別對用戶(hù)檢索內容進(jìn)行歸類(lèi)整理,清晰引導用戶(hù)進(jìn)行查閱。
(2)數據檢索范圍應包括站群內各業(yè)務(wù)部門(mén)、各縣(市、區)網(wǎng)站站點(diǎn),可對不同類(lèi)型數據源的數據進(jìn)行檢索。
(3)滿(mǎn)足即搜即用原則,支持圖片、視頻格式信息的檢索。
(4)支持關(guān)鍵字搜索、日期搜索。要求提供個(gè)性化檢索結果功能,如檢索結果分類(lèi)導航展現、檢索結果按不同維度(可以按系統,站點(diǎn),欄目,區縣,文檔類(lèi)型,時(shí)間單位,相似度等)過(guò)濾展示,檢索結果可進(jìn)行二次搜索。
(5)具有搜索關(guān)鍵詞自動(dòng)補全能力,動(dòng)態(tài)分析公眾搜索關(guān)鍵詞,按照關(guān)鍵詞的內在邏輯關(guān)系進(jìn)行自動(dòng)匹配,給出搜索提示,糾正用戶(hù)輸入錯誤。
(6)具有熱詞自動(dòng)排序和顯示功能,可自動(dòng)統計搜索關(guān)鍵詞的搜索頻度,將某一時(shí)間段內搜索量較高的關(guān)鍵詞作為搜索熱詞,并根據熱度動(dòng)態(tài)自動(dòng)調整排序。
(7)支持拼音搜索功能,采用詞語(yǔ)智能拼音匹配模式,并結合關(guān)鍵詞提醒聯(lián)想功能,實(shí)現拼音和中文友好聯(lián)系的搜索功能。
(8)系統支持管理員定義屏蔽詞和停用詞的搜索,當用戶(hù)輸入收錄
的詞匯時(shí),系統不展示搜索結果信息。
(9)支持多個(gè)關(guān)鍵詞搜索和整句搜索。
(10)系統使用基于文檔語(yǔ)義的技術(shù)實(shí)現同一站點(diǎn)內搜索結果信息的自動(dòng)排重,即“相同”的文檔在索引過(guò)程中僅被索引一次,解決大量相同文檔的搜索問(wèn)題,提高索引效率,幫助用戶(hù)快速找到搜索結果。
(11)對含有圖片的信息,其搜索結果列表應顯示其縮略圖;
(12)系統具有檢索結果優(yōu)先顯示置頂功能。
?。ㄊ┲悄芡扑]系統
(1)根據網(wǎng)站用戶(hù)訪(fǎng)問(wèn)行為,結合網(wǎng)站數據分析,找到網(wǎng)站訪(fǎng)問(wèn)熱點(diǎn),自動(dòng)聚合相關(guān)信息(即相關(guān)文件、政策、咨詢(xún)類(lèi)信息),實(shí)現網(wǎng)站信息智能推薦。
(2)可根據關(guān)鍵詞、熱詞等條件分析信息之間的直接聯(lián)系或間接關(guān)系,自動(dòng)分析、梳理、聚類(lèi)展示。
(3)可自動(dòng)進(jìn)行專(zhuān)題信息匯聚,通過(guò)數據采集技術(shù),獲取相關(guān)信息進(jìn)行集中
管理和存儲,根據用戶(hù)訪(fǎng)問(wèn)習慣,進(jìn)行數據的重組、拼裝,聚合,形成專(zhuān)題欄目;也可根據各專(zhuān)題的關(guān)注度,對推薦專(zhuān)題及相應的頁(yè)面表現位置進(jìn)行展示順序的自動(dòng)調整,供公眾訪(fǎng)問(wèn)。

?。ㄊ唬┲悄軉?wèn)答系統
(1)能夠深度挖掘網(wǎng)站群信息內容,建立和完善智能應答知識庫,可根據用戶(hù)自定義規則,通過(guò)信息聚合技術(shù),按照信息采集、聚合、挖掘和檢索流程,實(shí)現跨部門(mén)、跨行業(yè)的信息整合與資源共享。
(2)能夠自動(dòng)將咨詢(xún)問(wèn)題保存入庫,可自定義站點(diǎn)檢索到相關(guān)咨詢(xún)問(wèn)題,可實(shí)時(shí)預處理用戶(hù)的輸入信息,根據輸入內容與后臺檢索引擎交互,自動(dòng)糾錯,實(shí)時(shí)提示相關(guān)信息,引導類(lèi)似問(wèn)題進(jìn)行解答。
(3)可利用信息資源庫及應答知識庫中的信息,即時(shí)自動(dòng)回答用戶(hù)提出的問(wèn)題,向用戶(hù)展示相關(guān)度較高的信息。
(4)能夠充分使用站群內所有站點(diǎn)的信息資源,咨詢(xún)問(wèn)題答復內容可由平臺下多個(gè)站點(diǎn)信息數據組成關(guān)聯(lián)頁(yè)面提供給用戶(hù)。
(5)能夠實(shí)現多樣化展現方式,可以預分類(lèi)政務(wù)資源,將多個(gè)網(wǎng)站中的同類(lèi)欄目合并為一個(gè)分類(lèi),為用戶(hù)按分類(lèi)展現更全面精準的搜索結果。
(6)要求具備自學(xué)習功能,能夠自動(dòng)豐富知識庫,對于無(wú)法解決的問(wèn)題可自動(dòng)轉人工解答。
?。ㄊ┮苿?dòng)門(mén)戶(hù)系統
(1)要求采用HTML5網(wǎng)站頁(yè)面應自適應技術(shù),能夠實(shí)現不同移動(dòng)終端(例如蘋(píng)果、安卓系統) 訪(fǎng)問(wèn)移動(dòng)門(mén)戶(hù)時(shí)自適應展示,能夠在各種訪(fǎng)問(wèn)終端下保持完整良好的頁(yè)面布局和內容可讀性。
(2)要求移動(dòng)端與PC端使用同一域名進(jìn)行訪(fǎng)問(wèn),系統自動(dòng)識別訪(fǎng)問(wèn)終端并自適應頁(yè)面展示效果。
(3)要求移動(dòng)門(mén)戶(hù)所展示信息不再二次錄入,統一由站點(diǎn)內容管理系統提供,以保證數據來(lái)源的統一性。
(4)要求提供最新新聞、政務(wù)公開(kāi)、互動(dòng)交流、解讀回應、民意調查、輿論引導、政務(wù)服務(wù)、政府辦公等信息內容的展示。
(5)要求支持可定制欄目訪(fǎng)問(wèn)。
五、其他需求說(shuō)明
1.網(wǎng)站兼容性要求
要求網(wǎng)站頁(yè)面具有很好的兼容性,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
2.UI/UE設計
(1)界面設計需要突出地方特色
(2)文字,圖形色彩統一,搭配合理,界面清楚整潔,層次結構清楚。
(3)統一首頁(yè)和其他各級頁(yè)面的排版風(fēng)格。
(4)頁(yè)面富有時(shí)代氣息和美感,色彩搭配穩重、合理、大氣。
(5)多媒體、動(dòng)畫(huà)頁(yè)面要求豐富而生動(dòng)。
3.子站設計要求
(1)滿(mǎn)足各子站個(gè)性化頁(yè)面設計需求,根據各部門(mén)網(wǎng)站管理人員要求進(jìn)行設計與實(shí)施。
(2)本次頁(yè)面設計主要從以下幾個(gè)方面進(jìn)行規劃:頁(yè)面風(fēng)格、頁(yè)面人性化和易用性、頁(yè)面內容、頁(yè)面結構等,圍繞信息公開(kāi)、辦事服務(wù)、互動(dòng)交流等功能定位,設計門(mén)戶(hù)網(wǎng)站頁(yè)面框架,清晰、合理、科學(xué)展現網(wǎng)站內容,避免累贅和頁(yè)面冗余。
4.歷史數據遷移要求
(1)要求提出詳盡的網(wǎng)站數據遷移方案。
(2)要求將實(shí)施集約化的網(wǎng)站的全部數據,收錄
各站點(diǎn)欄目信息、新聞信息、公開(kāi)信息、互動(dòng)信息、用戶(hù)信息、用戶(hù)對應權限、圖片、附件、多媒體文件等數據平穩遷移至德陽(yáng)市政府網(wǎng)站集約化平臺,確保不丟失任何有效數據,處理好新網(wǎng)站欄目信息與歷史數據的對應關(guān)系。
(3)要求保證集約化網(wǎng)站切換的平滑過(guò)渡,做好數據的同步更新。
5.硬件及部署要求
投標人必須詳細列出項目的硬件需求,即政務(wù)云平臺虛擬機數量及資源參數,以及系統的部署方案。
六、項目實(shí)施、培訓
?。ㄒ唬╉椖靠⒐を炇找?br /> 按中華人民共和國現行項目建設規范和合同規定的驗收評定標準等要求進(jìn)行驗收。
根據施工進(jìn)度情況,按照標志性工作成果劃分,分期進(jìn)行檢查、驗收。
2.實(shí)施要求
投標人應具體說(shuō)明實(shí)施本項目擬采用方案,確保至少兩人駐場(chǎng)實(shí)施,團隊
組織方式和保障力量,中標單位實(shí)施過(guò)程中出現資源、速度、質(zhì)量協(xié)調控制不力、采購方有權更換責任人。
3.測試要求
投標供應商在實(shí)施過(guò)程中必須制定整體的測試方案,保證各子系統聯(lián)接正確,數據傳送正常。測試方案要明確測試關(guān)鍵點(diǎn),分單元測試、邊緣測試、整體測試等。測試方法應包括模塊測試、回歸測試、壓力測試、性能測試、功能測試、數據測試、安全測試、系統測試等。測試內容必須包括功能要求、可靠性、安全性、可擴充性、可維護性、平臺移植性、整體性能、與其他平臺接口等,系統試運行期不低于三個(gè)月。
4.驗收要求
投標供應商應負責在項目用戶(hù)驗收前將系統的全部相關(guān)的系統軟件,各階段開(kāi)發(fā)文檔,平臺及其他應用系統交互接口功能的源代碼和數據表結構,以及有關(guān)產(chǎn)品的系統說(shuō)明書(shū)、安裝手冊、維護手冊、技術(shù)文件、資料及安裝、測試、驗收報告等文檔匯集成冊交付項目單位。只有文檔齊全后方可組織驗收。對整個(gè)項目的驗收包括檢查整個(gè)系統是否實(shí)現了招標人所要求的功能,是否與投標供應商提出的解決方案中既定目標功能完全一致。
投標供應商必須根據系統總體設計方案提出驗收細則和驗收文檔清單(收錄
需求調研、系統分析、軟件設計、軟件開(kāi)發(fā)、系統測試、實(shí)施上線(xiàn)、運行維護等階段),招標人將根據驗收方案對系統每個(gè)部分逐一進(jìn)行項目驗收。
5.文檔要求
投標供應商提供的技術(shù)文件應該真實(shí)、全面、完整、詳細,應以中文書(shū)寫(xiě)。投標供應商提供的技術(shù)文件應是能滿(mǎn)足系統運行所需的安裝調試、操作使用及維護管理等的詳細技術(shù)資料。
投標供應商應負責在項目最終驗收時(shí)將系統從合同簽定之日起所有關(guān)于本項目的文檔資料(包括初步驗收文檔的版本更新和試運行期產(chǎn)生的文檔)交付采購人。
招標人認為必要的其他文檔。
?。ǘ┡嘤柍兄Z
供應商技術(shù)培訓及相關(guān)系統的基礎培訓,內容包括軟件安裝調試及初始化、使用等的基本操作培訓。供應商須制定出詳細完整的培訓方案,包括培訓的具體內容、培訓方式(現場(chǎng)培訓或集中培訓)、人數、教師、日程安排、資料等。應能使采購人相關(guān)人員獨立操作、維護、管理,確保系統能正常安全運行。
供應商應提供的詳細培訓方案必須包括:(1)集群管理員操作培訓;(2)各
部門(mén)管理員、應用軟件操作員等的基本操作培訓。
實(shí)際培訓時(shí)間和地點(diǎn)按中標人與采購人商定的為準。
七、售后服務(wù)技術(shù)需求
售后服務(wù)包括但不限于下列服務(wù):
1.網(wǎng)站頁(yè)面優(yōu)化服務(wù)
(1)網(wǎng)站信息維護培訓指導。包括網(wǎng)站信息的增、刪、查、改等操作的指導和問(wèn)題解答;添加圖片及附件操作指導;網(wǎng)站靜態(tài)頁(yè)面生成等操作指導。
(2)網(wǎng)站頁(yè)面的圖片、文字排版和調整。包括網(wǎng)頁(yè)圖片的制作、更換、布局調整,文字的內容、格式、鏈接等的修改。
(3)保證網(wǎng)站頁(yè)面顯示正常。解決文字或圖片內容撐出、內容不顯示或顯示不正確、頁(yè)面文字出現亂碼、頁(yè)面出現錯誤報告、頁(yè)面在有的瀏覽器上顯示不正確、頁(yè)面沒(méi)有找到、網(wǎng)頁(yè)不能訪(fǎng)問(wèn)等問(wèn)題。
2. 網(wǎng)站內容管理平臺及選件維護服務(wù)
(1)對國家及省政府最新要求的響應
及時(shí)響應國家及省政府對政府門(mén)戶(hù)網(wǎng)站、集約化建設及互聯(lián)網(wǎng)+政務(wù)服務(wù)相關(guān)內容的建設要求,對門(mén)戶(hù)網(wǎng)站前臺服務(wù)內容進(jìn)行調整。
(2)模版維護服務(wù)
每月一次。包括:定期對現有網(wǎng)站巡檢,對現有的模版存在的不足進(jìn)行調優(yōu),如排版不合適、格式不統一、色調不一致、內容塊錯位、字體大小不一致、文字沒(méi)對齊等情況,但不涉及到頁(yè)面新的風(fēng)格。對現有的模版調整,包括添加刪除專(zhuān)題鏈接、頁(yè)面局部細節樣式調整,錯字,錯鏈,圖標替換等,提交《網(wǎng)站模版優(yōu)化記錄》。
(3)常規檢查維護
每月一次。包括:各服務(wù)器運行狀況、存儲空間狀況、軟件運行狀況、備份系統狀況等。并提出現有問(wèn)題和解決方法,并提交《網(wǎng)站常規檢查維護運行狀況報告》。
(4)專(zhuān)題維護
根據用戶(hù)需求提供專(zhuān)題制作協(xié)助服務(wù)。
(5)產(chǎn)品版本升級
不定期提供。主要幫助客戶(hù)不斷完善產(chǎn)品的功能和系統穩定性。每次升級要對升級的版本、工作做好日志記錄,并提交《版本升級記錄表》。
3、技術(shù)運維服務(wù)
(1)備份服務(wù)
對門(mén)戶(hù)網(wǎng)站系統涉及到的內容進(jìn)行備份,包括數據庫每天備份、網(wǎng)站應用程
序備份、網(wǎng)站所有補丁備份、項目涉及到的文檔進(jìn)行備份等。提交《系統備份檢查表》,內容包括備份聯(lián)系人、聯(lián)系電話(huà)、時(shí)間、路徑、內容等。
(2)錯誤日志分析
對網(wǎng)站涉及到的所有日志(包括中間件等產(chǎn)品)記錄要進(jìn)行定期查看,找出錯誤內容。提交《日志錯誤分析表》。
4、服務(wù)質(zhì)量要求
(1)質(zhì)量保證期限及費用
系統驗收合格、雙方簽署驗收書(shū)之日起,為本次建設內容中的子站提供至少1年維保服務(wù)。在系統維護期內,開(kāi)發(fā)的軟件應提供免費升級服務(wù)。維保服務(wù)到期后,應承諾對系統的升級僅收取成本費。
(2)售后服務(wù)方案
中標人需要提供詳細的售后服務(wù)方案,包括服務(wù)人員、措施、應急預案及相關(guān)流程等內容。在安裝、調試及系統免費維護期內,必須提供系統故障的應急處理方案。承諾所投產(chǎn)品系統不存在“后門(mén)”問(wèn)題。
(3)服務(wù)響應要求
中標人承諾提供現場(chǎng)服務(wù)人員,且能夠提供7*24小時(shí)響應服務(wù),一般問(wèn)題30分鐘之內解決,重大問(wèn)題4小時(shí)內解決。
說(shuō)明:
1、歡迎供應商提供服務(wù)保障等于或高于該基本要求的服務(wù)。
2、本章的要求不能作為資格性條件要求評標,如存在資格性條件要求,應當認定招標文件編制存在重大缺陷,評標委員會(huì )應當停止評標。
干貨教程:【Python】抖音采集話(huà)題/音樂(lè )/用戶(hù)作品和喜歡+調用Aria2下載+fire
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 253 次瀏覽 ? 2022-11-22 16:26
抖音集合開(kāi)源倉庫
介紹
Python 獲取數據 + Vue 寫(xiě)入接口 + Aria2 下載
根據抖音的各種鏈接或ID,通過(guò)網(wǎng)頁(yè)界面采集視頻作品并下載到本地計算機。
支持用戶(hù)主頁(yè)鏈接或sec_uid/主題挑戰和音樂(lè )配樂(lè )鏈接或ID。
支持下載喜歡的列表(需要喜歡的列表可見(jiàn))。
使用0x00安裝依賴(lài)項
在程序目錄中打開(kāi)命令行,然后輸入
pip install -r requirements.txt
0x01 使用界面
雙擊打開(kāi)啟動(dòng).bat,或在程序目錄中打開(kāi)命令行,輸入
python ui.py
0x02 直接修改 douyin.py 中的相關(guān)參數
完全不懂 Python 的朋友使用命令行或操作界面。
0x03 使用 exec.py 直接從命令行運行以查看命令列表,或使用 -h 參數查看幫助
python exec.py
python exec.py -h
python exec.py download -h
python exec.py download_batch -h
使用函數名稱(chēng)調用程序
--type??指定下載類(lèi)型,默認值:--type=user
--limit 指定采集數量,默認值:--limit=0(不限制)
例如,采集
用戶(hù)的所有作品:
python exec.py download https://v.douyin.com/xxxx/
python exec.py download 用戶(hù)的secuid
例如,采集
用戶(hù)喜歡的前 10 部作品:
python exec.py download MS4wLjABAAAAl7TJWjJJrnu11IlllB6Mi5V9VbAsQo1N987guPjctc8 --type=like --limit=10
python exec.py download 用戶(hù)的secuid
例如,采集
音樂(lè )配樂(lè )的前 10 首作品:
python exec.py download https://v.douyin.com/xxxx/ --type=music --limit=10
python exec.py download 音樂(lè )ID --type=music --limit=10
TODO知識點(diǎn):抖音相關(guān)Aria2相關(guān)Python相關(guān)命令行模塊、火相關(guān)UI模塊、pywebview相關(guān)抖音集合部分源碼
# -*- encoding: utf-8 -*-
'''
@File? ? :? ?douyin.py
@Time? ? :? ?2021年03月12日 18:16:57 星期五
@Author??:? ?erma0
@Version :? ?1.0
@Link? ? :? ?https://erma0.cn
@Desc? ? :? ?抖音用戶(hù)作品采集
'''
import json
import os
import time
from urllib.parse import parse_qs, urlparse
import requests
from download import Download
class Douyin(object):
? ? """
? ? 抖音用戶(hù)類(lèi)
? ? 采集作品列表
? ? """
? ? def __init__(self, param: str, limit: int = 0):
? ?? ???"""
? ?? ???初始化用戶(hù)信息
? ?? ???參數自動(dòng)判斷:ID/URL
? ?? ???"""
? ?? ???self.limit = limit
? ?? ???self.http = requests.Session()
? ?? ???self.url = ''
? ?? ???self.type = 'unknow'
? ?? ???self.download_path = '暫未定義目錄'
? ?? ???# ↑ 預定義屬性,避免調用時(shí)未定義 ↑
? ?? ???self.param = param.strip()
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'??# sign可以固定
? ?? ???self.__get_type()??# 判斷當前任務(wù)類(lèi)型:鏈接/ID
? ?? ???self.aria2 = Download()??# 初始化Aria2下載服務(wù),先不指定目錄了,在設置文件名的時(shí)候再加入目錄
? ?? ???self.has_more = True
? ?? ???self.finish = False
? ?? ???# 字典格式方便入庫用id做key/取值/修改對應數據,但是表格都接收數組
? ?? ???self.videosL = []??#列表格式
? ?? ???# self.videos = {}??#字典格式
? ?? ???self.gids = {}??# gid和作品序號映射
? ? def __get_type(self):
? ?? ???"""
? ?? ???判斷當前任務(wù)類(lèi)型
? ?? ???鏈接/ID
? ?? ???"""
? ?? ???if '://' in self.param:??# 鏈接
? ?? ?? ?? ?self.__url2redirect()
? ?? ???else:??# ID
? ?? ?? ?? ?self.id = self.param
? ? def __url2redirect(self):
? ?? ???"""
? ?? ???取302跳轉地址
? ?? ???短連接轉長(cháng)鏈接
? ?? ???"""
? ?? ???headers = {??# 以前作品需要解析去水印,要用到移動(dòng)端UA,現在不用了
? ?? ?? ?? ?'User-Agent':
? ?? ?? ?? ?'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/89.0.4389.82'
? ?? ???}
? ?? ???try:
? ?? ?? ?? ?r = self.http.head(self.param, headers=headers, allow_redirects=False)
? ?? ?? ?? ?self.url = r.headers['Location']
? ?? ???except:
? ?? ?? ?? ?self.url = self.param
? ? def __url2id(self):
? ?? ???try:
? ?? ?? ?? ?self.id = urlparse(self.url).path.split('/')[3]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def __url2uid(self):
? ?? ???try:
<p>
? ?? ?? ?? ?query = urlparse(self.url).query
? ?? ?? ?? ?self.id = parse_qs(query)['sec_uid'][0]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def get_sign(self):
? ?? ???"""
? ?? ???網(wǎng)頁(yè)sign算法,現在不需要了,直接固定
? ?? ???"""
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'
? ?? ???return self.sign
? ? def get_user_info(self):
? ?? ???"""
? ?? ???取用戶(hù)信息
? ?? ???查詢(xún)結果在 self.user_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2uid()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('user_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.user_info = info
? ?? ???# 下載路徑
? ?? ???username = '{}_{}_{}'.format(self.user_info.get('short_id', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.user_info.get('nickname', '無(wú)昵稱(chēng)'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_challenge_info(self):
? ?? ???"""
? ?? ???取話(huà)題挑戰信息
? ?? ???查詢(xún)結果在 self.challenge_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/info/?ch_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('ch_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.challenge_info = info
? ?? ???# 話(huà)題挑戰下載路徑
? ?? ???username = '{}_{}_{}'.format(self.challenge_info.get('cid', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.challenge_info.get('cha_name', '無(wú)標題'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_music_info(self):
? ?? ???"""
? ?? ???取音樂(lè )原聲信息
? ?? ???查詢(xún)結果在 self.music_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/info/?music_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('music_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.music_info = info
? ?? ???# 音樂(lè )原聲下載路徑
? ?? ???username = '{}_{}_{}'.format(self.music_info.get('mid', '0'), self.music_info.get('title', '無(wú)標題'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def crawling_users_post(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品
? ?? ???"""
? ?? ???self.type = 'post'
? ?? ???self.__crawling_user()
? ? def crawling_users_like(self):
? ?? ???"""
? ?? ???采集用戶(hù)喜歡
? ?? ???"""
? ?? ???self.type = 'like'
? ?? ???self.__crawling_user()
? ? def crawling_challenge(self):
? ?? ???"""
? ?? ???采集話(huà)題挑戰
? ?? ???"""
? ?? ???self.type = 'challenge'
? ?? ???self.get_challenge_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... QFzfg
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "ch_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('話(huà)題挑戰采集出錯')
? ?? ???print('話(huà)題挑戰采集完成')
? ? def crawling_music(self):
? ?? ???"""
? ?? ???采集音樂(lè )原聲
? ?? ???"""
? ?? ???self.type = 'music'
? ?? ???self.get_music_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... OVC5j
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/list/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "music_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('音樂(lè )原聲采集出錯')
? ?? ???print('音樂(lè )原聲采集完成')
? ? def __crawling_user(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品/喜歡
? ?? ???"""
? ?? ???self.get_user_info()??# 取當前用戶(hù)信息,昵稱(chēng)用做下載目錄
? ?? ???max_cursor = 0
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/aweme/{}/'.format(self.type)
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "sec_uid": self.id,
? ?? ?? ?? ?? ? "count": "21",
? ?? ?? ?? ?? ? "max_cursor": max_cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "_signature": self.sign,
? ?? ?? ?? ?? ? "dytk": ""
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? max_cursor = res['max_cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('作品采集出錯')
? ?? ???print('作品采集完成')
? ? def __append_videos(self, res):
? ?? ???"""
? ?? ???數據入庫
? ?? ???"""
? ?? ???if res.get('aweme_list'):
? ?? ?? ?? ?for item in res['aweme_list']:
? ?? ?? ?? ?? ? info = item['statistics']
? ?? ?? ?? ?? ? info.pop('forward_count')
? ?? ?? ?? ?? ? info.pop('play_count')
? ?? ?? ?? ?? ? info['desc'] = Download.title2path(item['desc'])??# 需提前處理非法字符串
? ?? ?? ?? ?? ? info['uri'] = item['video']['play_addr']['uri']
? ?? ?? ?? ?? ? info['play_addr'] = item['video']['play_addr']['url_list'][0]
? ?? ?? ?? ?? ? info['dynamic_cover'] = item['video']['dynamic_cover']['url_list'][0]
? ?? ?? ?? ?? ? info['status'] = 0??# 下載進(jìn)度狀態(tài);等待下載:0,下載中:0.xx;下載完成:1
? ?? ?? ?? ?? ? # 列表格式
? ?? ?? ?? ?? ? self.videosL.append(info)
? ?? ?? ?? ?? ? # 字典格式
? ?? ?? ?? ?? ? # self.videos[info['aweme_id']] = info
? ?? ?? ?? ?? ? # 此處可以直接添加下載任務(wù),不過(guò)考慮到下載占用網(wǎng)速,影響采集過(guò)程,所以采集完再下載
? ?? ?? ?? ?if self.limit:
? ?? ?? ?? ?? ? more = len(self.videos) - self.limit
? ?? ?? ?? ?? ? if more >= 0:
? ?? ?? ?? ?? ?? ???# 如果給出了限制采集數目,超出的刪除后直接返回
? ?? ?? ?? ?? ?? ???self.has_more = False
? ?? ?? ?? ?? ?? ???# 列表格式
? ?? ?? ?? ?? ?? ???self.videosL = self.videosL[:self.limit]
? ?? ?? ?? ?? ?? ???# 字典格式
? ?? ?? ?? ?? ?? ???# for i in range(more):
? ?? ?? ?? ?? ?? ???#? ???self.videos.popitem()
? ?? ?? ?? ?? ?? ???# return
? ?? ???else:??# 還有作品的情況下沒(méi)返回數據則進(jìn)入這里
? ?? ?? ?? ?print('未采集完成,但返回作品列表為空')
? ? def download_all(self):
? ?? ???"""
? ?? ???作品抓取完成后,統一添加下載任務(wù)
? ?? ???可選擇在外部注冊回調函數,監聽(tīng)下載任務(wù)狀態(tài)
? ?? ???"""
? ?? ???for id, video in enumerate(self.videosL):
? ?? ?? ?? ?# for id, video in self.videos.items():
? ?? ?? ?? ?gid = self.aria2.download(url=video['play_addr'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???filename='{}/{}_{}.mp4'.format(self.download_path, video['aweme_id'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?video['desc'])
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???# ,options={'gid': id}??# 指定gid
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???)
? ?? ?? ?? ?self.gids[gid] = id??# 因為傳入gid必須16位,所以就不指定gid了,另存一個(gè)字典映射
? ?? ???print('下載任務(wù)投遞完成')</p>
技巧:拼多多大神是怎么復制抖音爆款上傳到自己店鋪的?這個(gè)工具無(wú)需授權
隨著(zhù)抖音小店的火爆,不少拼多多商家開(kāi)始在抖音上尋找爆款商品,急需一款抖音寶到拼多多小店收款的工具。
今天要跟大家分享的是一款支持斗尚拼的工具。不僅可以采集復制寶物上架,還可以采集寶物進(jìn)行分析優(yōu)化。下面我主要介紹大家用的比較多的3個(gè)工具:
?、賹氊悘椭疲阂绘I復制抖音小店寶貝上傳至拼多多,支持批量采集
,可快速完成發(fā)貨!
工具支持多次開(kāi)啟,無(wú)需授權,不綁定電腦。店鋪團版支持5-200家店鋪!
?、趫D片處理器:抖音店鋪寶貝圖片一鍵采集
工具限時(shí)免費,快來(lái)試用吧~
本工具可以一鍵采集下載淘喜、拼多多、京東、豆店寶的主圖、sku圖、詳情頁(yè)、750詳情圖、主圖視頻、搜索列表展示圖等,還可以自動(dòng)拼接詳情圖片。
寶貝優(yōu)化過(guò)程中,賣(mài)家可以采集競品寶貝圖片進(jìn)行分析,并一鍵導出數據,方便美工學(xué)習和模仿。
?、蹖氊愒斍椋ㄔu論/sku/買(mǎi)家秀/問(wèn)大家)分析器:一鍵采集
抖音店鋪寶貝評論/sku/買(mǎi)家秀/問(wèn)大家
工具限時(shí)免費,快來(lái)試用吧~
一鍵采集
淘喜、拼多多、京東、豆店等各大平臺評論、sku占比分析、下載買(mǎi)家秀等,并支持一鍵拆分評論根、根占比分析、挖掘產(chǎn)品賣(mài)點(diǎn)。重點(diǎn)采集
問(wèn)大家,分析買(mǎi)家痛點(diǎn)。
工具免費分享,有需要的賣(mài)家可以免費試用!
下面,小編就為大家詳細講解一下拼多多寶貝復制工具的使用方法:
1.采集
寶貝
數據來(lái)源包括淘寶/天貓、1688、抖音小店、拼多多批發(fā)等平臺。也就是說(shuō),賣(mài)家可以在淘寶、1688、抖音小店、批發(fā)商上采集
寶貝并上傳到自己的店鋪。
工具限時(shí)免費,快來(lái)試用吧~
淘寶平臺采集寶貝數據,需要登錄普通買(mǎi)家賬號。如果采集
太多,可以在多個(gè)帳戶(hù)之間切換。1688和淘寶賬號一樣。
無(wú)需登錄即可采集
拼多多批發(fā)寶貝數據。如果您采集
了拼多多寶貝的數據,可以通過(guò)手機號和token登錄。
多多寶的采集
方式可以通過(guò)關(guān)鍵詞和分類(lèi)采集
,也可以全店采集
、其他平臺采集
、復制或批量導入。
2.上傳配置
寶貝收好后,進(jìn)入配置頁(yè)面:
工具限時(shí)免費,快來(lái)試用吧~
還沒(méi)有收到工具的賣(mài)家可以免費試用,還有限時(shí)會(huì )員權限!
一、價(jià)格
拼多多上的商品價(jià)格包括單價(jià)、單價(jià)、折扣價(jià)、最低SKU價(jià)等,采集
淘寶寶貝一般默認為折扣價(jià),折扣價(jià)顯示如下圖:
如果優(yōu)惠價(jià)格是臨時(shí)活動(dòng),沒(méi)有優(yōu)惠后,源鏈接價(jià)格會(huì )上漲。
拼多多默認單價(jià),可以通過(guò)加百分比、加減固定金額、指定價(jià)格等方式設置。
工具限時(shí)免費,快來(lái)試用吧~
2. 圖片
主圖可以默認不處理,也可以選擇以下幾張作為主圖。采集到的淘寶寶貝只有5張主圖,工具可以自動(dòng)補全10張主圖。
細節圖也可以不處理,也可以去掉指定位置的地圖,保留編號,也可以插入自定義細節圖,自定義細節加水印。
對于采集到的淘寶寶貝,高度超過(guò)1500的詳細圖片可以自動(dòng)壓縮分割,壓縮可以減少圖片空間的占用。
注意:處理圖片時(shí),一定要勾選【使用圖片空間上傳圖片】!如果你復制視頻,你需要有上傳視頻的權限!
3.標題
標題設置包括標題清詞(啟用本地自定義過(guò)濾)、標題過(guò)濾詞、標題替換(寶貝ID=新標題)等。標題可以通過(guò)添加前綴/后綴或直接替換來(lái)處理。
可以設置新標題只保留采集
寶貝標題前的字符數。特殊分類(lèi)支持長(cháng)標題校驗【上傳寶貝標題支持10個(gè)字符】。
標題重組可以分裂根,隨機打亂和重組。
4.類(lèi)別
因為商品類(lèi)目是跨平臺的,只是部分商品的類(lèi)目分類(lèi)會(huì )有所不同。需要手動(dòng)指定四級類(lèi)別(每個(gè)類(lèi)別級別都必須選擇),但大多數情況下默認匹配上一個(gè)類(lèi)別。
5.單品
SKU規格配置,不同平臺有不同的SKU屬性,可以過(guò)濾/替換符號和違禁詞,自動(dòng)分割SKU名稱(chēng)和備注,商家也可以自定義SKU。
注意:如果沒(méi)有sku,默認添加一個(gè)sku,最大數量限制為24個(gè)!
6.屬性
商品類(lèi)型可根據實(shí)際情況選擇,如普通商品、虛擬商品、進(jìn)口商品、積分卡或海外抄送個(gè)人郵寄等。
設置品牌(可以選擇不使用該品牌或更換其他品牌),設置產(chǎn)品編碼,是否支持假一賠十,7天無(wú)理由,壞了賠,是否秒-手/虛擬產(chǎn)品,您還可以自定義屬性。
7. 運輸
商家可以設置物流重量、物流類(lèi)型、發(fā)貨時(shí)間。
還沒(méi)有收到工具的賣(mài)家,點(diǎn)擊↓即可免費試用!
3.上傳
點(diǎn)擊保存設置后,會(huì )跳轉至上傳頁(yè)面,如下圖:
工具限時(shí)免費,快來(lái)試用吧~
賣(mài)家可以通過(guò)瀏覽器操作將寶貝信息上傳至列表,保存至草稿箱,或直接上架。如果上傳失敗,則不會(huì )保存到草稿箱。
此外,該頁(yè)面還可以清空上傳列表,刪除勾選的寶貝,去除上傳成功導出失敗的鏈接,選擇運費模板,一鍵勾選跳過(guò)重復上傳的寶貝。
繁瑣的操作也變得簡(jiǎn)單方便。通過(guò)工具裝貨,不僅可以解放雙手,還可以減少失誤,大大提高工作效率。
4.寶貝管理
對于店鋪寶貝,賣(mài)家可以在寶貝列表中選擇時(shí)間范圍內的店鋪、類(lèi)目、商品id數據,批量下架、修改價(jià)格和庫存等,一鍵刪除/清空寶貝。
工具限時(shí)免費,快來(lái)試用吧~
可設置清潔寶貝的創(chuàng )建時(shí)間、訪(fǎng)問(wèn)人數、采集
人數、銷(xiāo)量等,并可一鍵導出數據,查看修改失敗記錄。
注:右鍵列表可以查看上一個(gè)寶貝的鏈接。
五、服務(wù)保障
這款寶貝復制工具不僅功能穩定,而且還有完善的服務(wù)體系。多名技術(shù)人員24/7在線(xiàn),隨時(shí)處理用戶(hù)問(wèn)題。
無(wú)論是工具安裝問(wèn)題,還是日常操作問(wèn)題,賣(mài)家總能找到工作人員實(shí)時(shí)溝通。
同時(shí),工具技術(shù)團隊會(huì )定期采集
用戶(hù)需求,進(jìn)行有針對性的開(kāi)發(fā)和研發(fā),并保持工具功能版本不斷更新,滿(mǎn)足大家對商品的需求。
如果您需要工具,可以免費試用!
以上是寶貝復制工具的概況。功能穩定,服務(wù)保障完善。商戶(hù)可以輕松完成裝貨操作,大大提高工作效率。 查看全部
干貨教程:【Python】抖音采集話(huà)題/音樂(lè )/用戶(hù)作品和喜歡+調用Aria2下載+fire
抖音集合開(kāi)源倉庫
介紹
Python 獲取數據 + Vue 寫(xiě)入接口 + Aria2 下載
根據抖音的各種鏈接或ID,通過(guò)網(wǎng)頁(yè)界面采集視頻作品并下載到本地計算機。
支持用戶(hù)主頁(yè)鏈接或sec_uid/主題挑戰和音樂(lè )配樂(lè )鏈接或ID。
支持下載喜歡的列表(需要喜歡的列表可見(jiàn))。
使用0x00安裝依賴(lài)項
在程序目錄中打開(kāi)命令行,然后輸入
pip install -r requirements.txt
0x01 使用界面
雙擊打開(kāi)啟動(dòng).bat,或在程序目錄中打開(kāi)命令行,輸入
python ui.py
0x02 直接修改 douyin.py 中的相關(guān)參數
完全不懂 Python 的朋友使用命令行或操作界面。
0x03 使用 exec.py 直接從命令行運行以查看命令列表,或使用 -h 參數查看幫助
python exec.py
python exec.py -h
python exec.py download -h
python exec.py download_batch -h
使用函數名稱(chēng)調用程序
--type??指定下載類(lèi)型,默認值:--type=user
--limit 指定采集數量,默認值:--limit=0(不限制)
例如,采集
用戶(hù)的所有作品:
python exec.py download https://v.douyin.com/xxxx/
python exec.py download 用戶(hù)的secuid
例如,采集
用戶(hù)喜歡的前 10 部作品:
python exec.py download MS4wLjABAAAAl7TJWjJJrnu11IlllB6Mi5V9VbAsQo1N987guPjctc8 --type=like --limit=10
python exec.py download 用戶(hù)的secuid
例如,采集
音樂(lè )配樂(lè )的前 10 首作品:
python exec.py download https://v.douyin.com/xxxx/ --type=music --limit=10
python exec.py download 音樂(lè )ID --type=music --limit=10
TODO知識點(diǎn):抖音相關(guān)Aria2相關(guān)Python相關(guān)命令行模塊、火相關(guān)UI模塊、pywebview相關(guān)抖音集合部分源碼
# -*- encoding: utf-8 -*-
'''
@File? ? :? ?douyin.py
@Time? ? :? ?2021年03月12日 18:16:57 星期五
@Author??:? ?erma0
@Version :? ?1.0
@Link? ? :? ?https://erma0.cn
@Desc? ? :? ?抖音用戶(hù)作品采集
'''
import json
import os
import time
from urllib.parse import parse_qs, urlparse
import requests
from download import Download
class Douyin(object):
? ? """
? ? 抖音用戶(hù)類(lèi)
? ? 采集作品列表
? ? """
? ? def __init__(self, param: str, limit: int = 0):
? ?? ???"""
? ?? ???初始化用戶(hù)信息
? ?? ???參數自動(dòng)判斷:ID/URL
? ?? ???"""
? ?? ???self.limit = limit
? ?? ???self.http = requests.Session()
? ?? ???self.url = ''
? ?? ???self.type = 'unknow'
? ?? ???self.download_path = '暫未定義目錄'
? ?? ???# ↑ 預定義屬性,避免調用時(shí)未定義 ↑
? ?? ???self.param = param.strip()
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'??# sign可以固定
? ?? ???self.__get_type()??# 判斷當前任務(wù)類(lèi)型:鏈接/ID
? ?? ???self.aria2 = Download()??# 初始化Aria2下載服務(wù),先不指定目錄了,在設置文件名的時(shí)候再加入目錄
? ?? ???self.has_more = True
? ?? ???self.finish = False
? ?? ???# 字典格式方便入庫用id做key/取值/修改對應數據,但是表格都接收數組
? ?? ???self.videosL = []??#列表格式
? ?? ???# self.videos = {}??#字典格式
? ?? ???self.gids = {}??# gid和作品序號映射
? ? def __get_type(self):
? ?? ???"""
? ?? ???判斷當前任務(wù)類(lèi)型
? ?? ???鏈接/ID
? ?? ???"""
? ?? ???if '://' in self.param:??# 鏈接
? ?? ?? ?? ?self.__url2redirect()
? ?? ???else:??# ID
? ?? ?? ?? ?self.id = self.param
? ? def __url2redirect(self):
? ?? ???"""
? ?? ???取302跳轉地址
? ?? ???短連接轉長(cháng)鏈接
? ?? ???"""
? ?? ???headers = {??# 以前作品需要解析去水印,要用到移動(dòng)端UA,現在不用了
? ?? ?? ?? ?'User-Agent':
? ?? ?? ?? ?'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/89.0.4389.82'
? ?? ???}
? ?? ???try:
? ?? ?? ?? ?r = self.http.head(self.param, headers=headers, allow_redirects=False)
? ?? ?? ?? ?self.url = r.headers['Location']
? ?? ???except:
? ?? ?? ?? ?self.url = self.param
? ? def __url2id(self):
? ?? ???try:
? ?? ?? ?? ?self.id = urlparse(self.url).path.split('/')[3]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def __url2uid(self):
? ?? ???try:
<p>

? ?? ?? ?? ?query = urlparse(self.url).query
? ?? ?? ?? ?self.id = parse_qs(query)['sec_uid'][0]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def get_sign(self):
? ?? ???"""
? ?? ???網(wǎng)頁(yè)sign算法,現在不需要了,直接固定
? ?? ???"""
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'
? ?? ???return self.sign
? ? def get_user_info(self):
? ?? ???"""
? ?? ???取用戶(hù)信息
? ?? ???查詢(xún)結果在 self.user_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2uid()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('user_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.user_info = info
? ?? ???# 下載路徑
? ?? ???username = '{}_{}_{}'.format(self.user_info.get('short_id', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.user_info.get('nickname', '無(wú)昵稱(chēng)'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_challenge_info(self):
? ?? ???"""
? ?? ???取話(huà)題挑戰信息
? ?? ???查詢(xún)結果在 self.challenge_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/info/?ch_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('ch_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.challenge_info = info
? ?? ???# 話(huà)題挑戰下載路徑
? ?? ???username = '{}_{}_{}'.format(self.challenge_info.get('cid', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.challenge_info.get('cha_name', '無(wú)標題'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_music_info(self):
? ?? ???"""
? ?? ???取音樂(lè )原聲信息
? ?? ???查詢(xún)結果在 self.music_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/info/?music_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('music_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.music_info = info
? ?? ???# 音樂(lè )原聲下載路徑
? ?? ???username = '{}_{}_{}'.format(self.music_info.get('mid', '0'), self.music_info.get('title', '無(wú)標題'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def crawling_users_post(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品
? ?? ???"""
? ?? ???self.type = 'post'
? ?? ???self.__crawling_user()
? ? def crawling_users_like(self):
? ?? ???"""
? ?? ???采集用戶(hù)喜歡
? ?? ???"""
? ?? ???self.type = 'like'
? ?? ???self.__crawling_user()
? ? def crawling_challenge(self):
? ?? ???"""
? ?? ???采集話(huà)題挑戰
? ?? ???"""
? ?? ???self.type = 'challenge'
? ?? ???self.get_challenge_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... QFzfg
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "ch_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('話(huà)題挑戰采集出錯')

? ?? ???print('話(huà)題挑戰采集完成')
? ? def crawling_music(self):
? ?? ???"""
? ?? ???采集音樂(lè )原聲
? ?? ???"""
? ?? ???self.type = 'music'
? ?? ???self.get_music_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... OVC5j
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/list/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "music_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('音樂(lè )原聲采集出錯')
? ?? ???print('音樂(lè )原聲采集完成')
? ? def __crawling_user(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品/喜歡
? ?? ???"""
? ?? ???self.get_user_info()??# 取當前用戶(hù)信息,昵稱(chēng)用做下載目錄
? ?? ???max_cursor = 0
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/aweme/{}/'.format(self.type)
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "sec_uid": self.id,
? ?? ?? ?? ?? ? "count": "21",
? ?? ?? ?? ?? ? "max_cursor": max_cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "_signature": self.sign,
? ?? ?? ?? ?? ? "dytk": ""
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? max_cursor = res['max_cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('作品采集出錯')
? ?? ???print('作品采集完成')
? ? def __append_videos(self, res):
? ?? ???"""
? ?? ???數據入庫
? ?? ???"""
? ?? ???if res.get('aweme_list'):
? ?? ?? ?? ?for item in res['aweme_list']:
? ?? ?? ?? ?? ? info = item['statistics']
? ?? ?? ?? ?? ? info.pop('forward_count')
? ?? ?? ?? ?? ? info.pop('play_count')
? ?? ?? ?? ?? ? info['desc'] = Download.title2path(item['desc'])??# 需提前處理非法字符串
? ?? ?? ?? ?? ? info['uri'] = item['video']['play_addr']['uri']
? ?? ?? ?? ?? ? info['play_addr'] = item['video']['play_addr']['url_list'][0]
? ?? ?? ?? ?? ? info['dynamic_cover'] = item['video']['dynamic_cover']['url_list'][0]
? ?? ?? ?? ?? ? info['status'] = 0??# 下載進(jìn)度狀態(tài);等待下載:0,下載中:0.xx;下載完成:1
? ?? ?? ?? ?? ? # 列表格式
? ?? ?? ?? ?? ? self.videosL.append(info)
? ?? ?? ?? ?? ? # 字典格式
? ?? ?? ?? ?? ? # self.videos[info['aweme_id']] = info
? ?? ?? ?? ?? ? # 此處可以直接添加下載任務(wù),不過(guò)考慮到下載占用網(wǎng)速,影響采集過(guò)程,所以采集完再下載
? ?? ?? ?? ?if self.limit:
? ?? ?? ?? ?? ? more = len(self.videos) - self.limit
? ?? ?? ?? ?? ? if more >= 0:
? ?? ?? ?? ?? ?? ???# 如果給出了限制采集數目,超出的刪除后直接返回
? ?? ?? ?? ?? ?? ???self.has_more = False
? ?? ?? ?? ?? ?? ???# 列表格式
? ?? ?? ?? ?? ?? ???self.videosL = self.videosL[:self.limit]
? ?? ?? ?? ?? ?? ???# 字典格式
? ?? ?? ?? ?? ?? ???# for i in range(more):
? ?? ?? ?? ?? ?? ???#? ???self.videos.popitem()
? ?? ?? ?? ?? ?? ???# return
? ?? ???else:??# 還有作品的情況下沒(méi)返回數據則進(jìn)入這里
? ?? ?? ?? ?print('未采集完成,但返回作品列表為空')
? ? def download_all(self):
? ?? ???"""
? ?? ???作品抓取完成后,統一添加下載任務(wù)
? ?? ???可選擇在外部注冊回調函數,監聽(tīng)下載任務(wù)狀態(tài)
? ?? ???"""
? ?? ???for id, video in enumerate(self.videosL):
? ?? ?? ?? ?# for id, video in self.videos.items():
? ?? ?? ?? ?gid = self.aria2.download(url=video['play_addr'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???filename='{}/{}_{}.mp4'.format(self.download_path, video['aweme_id'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?video['desc'])
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???# ,options={'gid': id}??# 指定gid
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???)
? ?? ?? ?? ?self.gids[gid] = id??# 因為傳入gid必須16位,所以就不指定gid了,另存一個(gè)字典映射
? ?? ???print('下載任務(wù)投遞完成')</p>
技巧:拼多多大神是怎么復制抖音爆款上傳到自己店鋪的?這個(gè)工具無(wú)需授權
隨著(zhù)抖音小店的火爆,不少拼多多商家開(kāi)始在抖音上尋找爆款商品,急需一款抖音寶到拼多多小店收款的工具。
今天要跟大家分享的是一款支持斗尚拼的工具。不僅可以采集復制寶物上架,還可以采集寶物進(jìn)行分析優(yōu)化。下面我主要介紹大家用的比較多的3個(gè)工具:
?、賹氊悘椭疲阂绘I復制抖音小店寶貝上傳至拼多多,支持批量采集
,可快速完成發(fā)貨!
工具支持多次開(kāi)啟,無(wú)需授權,不綁定電腦。店鋪團版支持5-200家店鋪!
?、趫D片處理器:抖音店鋪寶貝圖片一鍵采集
工具限時(shí)免費,快來(lái)試用吧~
本工具可以一鍵采集下載淘喜、拼多多、京東、豆店寶的主圖、sku圖、詳情頁(yè)、750詳情圖、主圖視頻、搜索列表展示圖等,還可以自動(dòng)拼接詳情圖片。
寶貝優(yōu)化過(guò)程中,賣(mài)家可以采集競品寶貝圖片進(jìn)行分析,并一鍵導出數據,方便美工學(xué)習和模仿。
?、蹖氊愒斍椋ㄔu論/sku/買(mǎi)家秀/問(wèn)大家)分析器:一鍵采集
抖音店鋪寶貝評論/sku/買(mǎi)家秀/問(wèn)大家
工具限時(shí)免費,快來(lái)試用吧~
一鍵采集
淘喜、拼多多、京東、豆店等各大平臺評論、sku占比分析、下載買(mǎi)家秀等,并支持一鍵拆分評論根、根占比分析、挖掘產(chǎn)品賣(mài)點(diǎn)。重點(diǎn)采集
問(wèn)大家,分析買(mǎi)家痛點(diǎn)。
工具免費分享,有需要的賣(mài)家可以免費試用!
下面,小編就為大家詳細講解一下拼多多寶貝復制工具的使用方法:
1.采集
寶貝
數據來(lái)源包括淘寶/天貓、1688、抖音小店、拼多多批發(fā)等平臺。也就是說(shuō),賣(mài)家可以在淘寶、1688、抖音小店、批發(fā)商上采集
寶貝并上傳到自己的店鋪。
工具限時(shí)免費,快來(lái)試用吧~
淘寶平臺采集寶貝數據,需要登錄普通買(mǎi)家賬號。如果采集
太多,可以在多個(gè)帳戶(hù)之間切換。1688和淘寶賬號一樣。
無(wú)需登錄即可采集
拼多多批發(fā)寶貝數據。如果您采集
了拼多多寶貝的數據,可以通過(guò)手機號和token登錄。
多多寶的采集
方式可以通過(guò)關(guān)鍵詞和分類(lèi)采集
,也可以全店采集
、其他平臺采集
、復制或批量導入。
2.上傳配置
寶貝收好后,進(jìn)入配置頁(yè)面:

工具限時(shí)免費,快來(lái)試用吧~
還沒(méi)有收到工具的賣(mài)家可以免費試用,還有限時(shí)會(huì )員權限!
一、價(jià)格
拼多多上的商品價(jià)格包括單價(jià)、單價(jià)、折扣價(jià)、最低SKU價(jià)等,采集
淘寶寶貝一般默認為折扣價(jià),折扣價(jià)顯示如下圖:
如果優(yōu)惠價(jià)格是臨時(shí)活動(dòng),沒(méi)有優(yōu)惠后,源鏈接價(jià)格會(huì )上漲。
拼多多默認單價(jià),可以通過(guò)加百分比、加減固定金額、指定價(jià)格等方式設置。
工具限時(shí)免費,快來(lái)試用吧~
2. 圖片
主圖可以默認不處理,也可以選擇以下幾張作為主圖。采集到的淘寶寶貝只有5張主圖,工具可以自動(dòng)補全10張主圖。
細節圖也可以不處理,也可以去掉指定位置的地圖,保留編號,也可以插入自定義細節圖,自定義細節加水印。
對于采集到的淘寶寶貝,高度超過(guò)1500的詳細圖片可以自動(dòng)壓縮分割,壓縮可以減少圖片空間的占用。
注意:處理圖片時(shí),一定要勾選【使用圖片空間上傳圖片】!如果你復制視頻,你需要有上傳視頻的權限!
3.標題
標題設置包括標題清詞(啟用本地自定義過(guò)濾)、標題過(guò)濾詞、標題替換(寶貝ID=新標題)等。標題可以通過(guò)添加前綴/后綴或直接替換來(lái)處理。
可以設置新標題只保留采集
寶貝標題前的字符數。特殊分類(lèi)支持長(cháng)標題校驗【上傳寶貝標題支持10個(gè)字符】。
標題重組可以分裂根,隨機打亂和重組。
4.類(lèi)別
因為商品類(lèi)目是跨平臺的,只是部分商品的類(lèi)目分類(lèi)會(huì )有所不同。需要手動(dòng)指定四級類(lèi)別(每個(gè)類(lèi)別級別都必須選擇),但大多數情況下默認匹配上一個(gè)類(lèi)別。
5.單品
SKU規格配置,不同平臺有不同的SKU屬性,可以過(guò)濾/替換符號和違禁詞,自動(dòng)分割SKU名稱(chēng)和備注,商家也可以自定義SKU。
注意:如果沒(méi)有sku,默認添加一個(gè)sku,最大數量限制為24個(gè)!
6.屬性

商品類(lèi)型可根據實(shí)際情況選擇,如普通商品、虛擬商品、進(jìn)口商品、積分卡或海外抄送個(gè)人郵寄等。
設置品牌(可以選擇不使用該品牌或更換其他品牌),設置產(chǎn)品編碼,是否支持假一賠十,7天無(wú)理由,壞了賠,是否秒-手/虛擬產(chǎn)品,您還可以自定義屬性。
7. 運輸
商家可以設置物流重量、物流類(lèi)型、發(fā)貨時(shí)間。
還沒(méi)有收到工具的賣(mài)家,點(diǎn)擊↓即可免費試用!
3.上傳
點(diǎn)擊保存設置后,會(huì )跳轉至上傳頁(yè)面,如下圖:
工具限時(shí)免費,快來(lái)試用吧~
賣(mài)家可以通過(guò)瀏覽器操作將寶貝信息上傳至列表,保存至草稿箱,或直接上架。如果上傳失敗,則不會(huì )保存到草稿箱。
此外,該頁(yè)面還可以清空上傳列表,刪除勾選的寶貝,去除上傳成功導出失敗的鏈接,選擇運費模板,一鍵勾選跳過(guò)重復上傳的寶貝。
繁瑣的操作也變得簡(jiǎn)單方便。通過(guò)工具裝貨,不僅可以解放雙手,還可以減少失誤,大大提高工作效率。
4.寶貝管理
對于店鋪寶貝,賣(mài)家可以在寶貝列表中選擇時(shí)間范圍內的店鋪、類(lèi)目、商品id數據,批量下架、修改價(jià)格和庫存等,一鍵刪除/清空寶貝。
工具限時(shí)免費,快來(lái)試用吧~
可設置清潔寶貝的創(chuàng )建時(shí)間、訪(fǎng)問(wèn)人數、采集
人數、銷(xiāo)量等,并可一鍵導出數據,查看修改失敗記錄。
注:右鍵列表可以查看上一個(gè)寶貝的鏈接。
五、服務(wù)保障
這款寶貝復制工具不僅功能穩定,而且還有完善的服務(wù)體系。多名技術(shù)人員24/7在線(xiàn),隨時(shí)處理用戶(hù)問(wèn)題。
無(wú)論是工具安裝問(wèn)題,還是日常操作問(wèn)題,賣(mài)家總能找到工作人員實(shí)時(shí)溝通。
同時(shí),工具技術(shù)團隊會(huì )定期采集
用戶(hù)需求,進(jìn)行有針對性的開(kāi)發(fā)和研發(fā),并保持工具功能版本不斷更新,滿(mǎn)足大家對商品的需求。
如果您需要工具,可以免費試用!
以上是寶貝復制工具的概況。功能穩定,服務(wù)保障完善。商戶(hù)可以輕松完成裝貨操作,大大提高工作效率。
解決方案:服務(wù)器監控——Cacti(全新版)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-11-22 09:19
MariaDB-client MariaDB-server
MariaDB-devel
PHP \//安裝 LAMP 架構 PHP-SNMP
php-ldap
php-pdo
php-mysql
php-devel
PHP-梨
PHP 通用
PHP-GD
php-mbstring
php-xml
php-process
Net-SNMP
net-snmp-utils
net-snmp-libs
net-snmp-agent-libs
net-snmp-devel
RRDTOOL
rrdtool-php
rrdtool-perl
RRDTOOL-devel
GCC OpenSSL-DEVEL
DOS2UNIX
自動(dòng)會(huì )議
自動(dòng)制作
Binutils libtool
CPP 后綴
glibc-headers
內核標頭
格利布-德維爾GD
GD-DEVEL
幫助2人
新冠酸酯
wget 補丁// 以上都是配置仙人掌所需的插件[root@aa ~]# vi /etc/httpd/conf/httpd.confServerName [root@aa ~]# vi /etc/httpd/
conf.d/php.confLoadModule php5_module modules/libphp5.so[root@aa ~]# vi /etc/php.inisafe_mode = off // Add date.timezone = PRC //Find modification [root@aa ~]# systemctl stop firewalld.service[root@aa ~]# setenforce 0[root@aa ~]# systemctl start httpd.service[root@aa ~]# systemctl start mariadb.service
成功啟動(dòng) [root@aa ~]#
mysql_secure_installation // 按照提示初步設置 Mariadb,設置密碼,刪除匿名用戶(hù),打開(kāi)根遠程登錄,刷新權限下方燈測試,先測試 PHP 健康狀態(tài) [root@aa ~]# vi /var/www/html/index.php // 加入測試頁(yè)面 Win10 訪(fǎng)問(wèn)
PHP 工作正常,以下測試數據庫連接 [root@aa ~]# mysql -uroot –p//登錄數據庫進(jìn)行測試帳戶(hù)仙人掌授權 MariaDB [(none)]> 創(chuàng )建數據庫 仙人掌字符集 utf8 整理utf8_bin;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'%' 由 'admin123' 標識;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'localhost' 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/index.php // 替換 Windows 10 訪(fǎng)問(wèn)的測試頁(yè)面
數據庫連接沒(méi)有問(wèn)題
---------可以開(kāi)始安裝 cacti--------------[root@aa ~]# tar xf cacti-1。26. .tar.gz[root@aa ~]# MV 仙人掌-1。1。26 /var/www/html/cacti[root@aa ~]# mysql -ucacti -p cacti < /var/www/html/cacti/cacti。sql輸入 password:// 密碼 admin123 將仙人掌的數據庫導入 [root@aa ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -urootmysql -pEnter password:// 密碼是abc123,1。1。cacti 版本 26 需要導入時(shí)間數據庫 [root@aa ~]# mysql -uroot –p//授予 cacti 用戶(hù)對時(shí)間數據庫 MariaDB [(none)] 的權限>授予 mysql 上的選擇。time_zone_name “cacti”@“l(fā)ocalhost” 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/cacti/include/config。
php$database_username = 'cacti'; $database_password = 'admin123';//要修改這兩個(gè)項目,數據庫不在本地計算機上,需要修改 $rdatabase 對應的條目并刪除注釋 [root@aa ~]# vi /etc/snmp/snmpd。 confcom2sec notConfigUser localhost public // 更改為環(huán)回地址 41access notConfigGroup “”anynoauth exact all none none// 將系統視圖更改為所有 62view 全部收錄
。180 // 刪除 # 符號 85[root@aa ~]# systemctl restart snmpd。service[root@aa ~]# systemctl enable snmpd。service[root@aa ~]# useradd -r -M cacti[root@aa ~]# chown -R cacti。cacti /var/www/html/cacti/rra/[root@aa ~]# chown -R cacti。
cacti /var/www/html/cacti/log/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/resource/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/cache[root@aa ~]# chown -R apache。Apache /var/www/html/cacti/scripts
-----------安裝仙人掌脊椎
為了優(yōu)化數據輪詢(xún)速度-----新版本的 Cacti 可以在沒(méi)有 PHP 腳本的情況下采集
數據,并且集成了一個(gè)新的插件 spine 用于采集
數據[root@aa ~]# rpm -ivh help2man-1.41.1-3.el7.noarch.rpm//install spine dependencies[root@aa ~]# ln -s /usr/ lib64/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so[root@aa ~]# tar xf cacti-spine-1.1.26.tar.gz[root@aa ~]# CD 仙人掌-脊柱-1.1.26[root@aa 仙人掌脊椎-1.1.26]# ./ 配置[root@aa 仙人掌脊-1.1.26]# 制作 &&制作 install[root@aa ~]# cp /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf[root@aa ~]# vi /usr/local/spine/ etc/spine.conf// 修改相關(guān)參數DB_HostlocalhostDB_DatabasecactiDB_UsercactiDB_Passadmin123DB_Port3306
RDB_HostlocalhostRDB_DatabasecactiRDB_UsercactiRDB_Passadmin123RDB_Port3306配置后,win10可以訪(fǎng)問(wèn)192.168.80.181/cacti/進(jìn)行安裝
發(fā)現沒(méi)有安裝mbstring和snmp,數據庫參數設置有問(wèn)題,我們來(lái)優(yōu)化一下
安裝兩個(gè)軟件包[root@aa ~]# rpm -ivh php-mbstring-5.4.16-42.el7.x86_64.rpm[root@aa ~]#
rpm -ivh php-snmp-5.4.16-42.el7.x86_64.rpm 轉到數據庫設置 [root@aa ~]# vi /etc/f.d/fcharacter_set_ 服務(wù)器 = utf8mb4collation_server = utf8mb4_unicode_cicharacter_set_client = utf8mb4max_connections = 100max_heap_table_size = 256Mmax_allowed_packet = 16777216join_buffer_size = 64Mtmp_table_size = 64Minnodb_file_per_table = ONinnodb_buffer_pool_size = 1024Minnodb_doublewrite = OFFinnodb_lock_wait_timeout = 50innodb_flush_log_at_timeout = 3innodb_read_io_線(xiàn)程 = 32innodb_write_io_threads = 16[root@aa ~]# 服務(wù) MariaDB 重啟[root@aa ~]# 服務(wù) httpd 重啟,然后訪(fǎng)問(wèn)網(wǎng)頁(yè)安裝
軟件包已安裝
數據庫配置沒(méi)有問(wèn)題,然后直接下一步
根據要求選擇安裝后,初始用戶(hù)名admin密碼admin,輸入后需要更改密碼,密碼有一定的復雜度,必須超過(guò)8位數字(必須收錄
大寫(xiě)小寫(xiě)字符)。
登錄成功----------------以下仙人掌監控設置------------------控制臺 -> 設置 -> 路徑 -> 在 Spine 配置文件路徑 /usr/local/spine/bin/spine 中填寫(xiě) spine 二進(jìn)制文件
位置文本框 在文件路徑文本框中填寫(xiě)配置文件路徑 /usr/local/spine/etc/spine.conf,然后單擊保存。
控制臺 ->設置 -> 輪詢(xún)器
-> 在輪詢(xún)器類(lèi)型下拉框中選擇脊柱,然后單擊保存。注意:如果使用 spine,則以下兩個(gè)輪換時(shí)間和計劃任務(wù)間隔應設置為每分鐘
添加設備和圖形后,需要重建采集
器緩存??刂婆_>系統實(shí)用程序>重建輪詢(xún)器緩存
點(diǎn)擊進(jìn)入以下屏幕,無(wú)需設置
仙人掌的基本配置之后,
你需要在服務(wù)器上添加一個(gè)定時(shí)任務(wù)來(lái)采集
數據(PHP 中定時(shí)任務(wù)的間隔是 5 分鐘,而我們使用 Spine 模式時(shí),定時(shí)任務(wù)的間隔是 1 分鐘)[root@aa cacti]# crontab –e*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php >> /tmp/ cacti_rrdtool.log我們去仙人掌檢查管理 ? 設備(設備)檢查 Linux 狀態(tài)為 UP, 注意不要著(zhù)急 脊椎方式剛開(kāi)始大約需要2-5分鐘,有快有慢
您可以在下面創(chuàng )建一個(gè)圖表來(lái)分析所選設備
選擇GO
然后直接選擇圖形查看仙人掌加工后的圖片
解決方案:降本增效利器?Share Creators智能數字資產(chǎn)管理系統真香!
降本增效似乎是一個(gè)持續而永恒的話(huà)題。尤其是今年,尤為重要~
疫情不知不覺(jué)已經(jīng)伴隨我們三年了。在各行各業(yè)都受到疫情沖擊較大的背景下,降本增效對于很多企業(yè)來(lái)說(shuō)不再是錦上添花,而可能是唯一的出路。
隨著(zhù)市場(chǎng)的縮小和競爭的加劇,在更加“體量”的行業(yè)環(huán)境下,如何通過(guò)提升自身效率來(lái)有效降低成本,是每個(gè)團隊都面臨的問(wèn)題。
什么是降低成本?如何提高效率?
要回答這個(gè)問(wèn)題,我先來(lái)看看各個(gè)團隊每天都在經(jīng)歷什么:
您是否經(jīng)常淹沒(méi)在充滿(mǎn)不同版本和各種文件的文件夾中?苦苦尋找,還是找不到最新的文件分享?當你終于找到自己需要的資源時(shí),往往需要通過(guò)不同的通訊軟件與內部同事和外部伙伴公開(kāi)分享。
簡(jiǎn)單計算一下,制作一個(gè)游戲角色需要2個(gè)月左右,目前國內平均制作價(jià)格為1000元/天,一個(gè)丟失的文件損失約4萬(wàn)元。你現在的公司能保證每個(gè)文件的流程文件和最終文件都能妥善備份,并且隨時(shí)可以找到嗎?
設計行業(yè)往往伴隨著(zhù)大量的數字資產(chǎn),文件種類(lèi)繁多,種類(lèi)繁多。一個(gè)CG 3D文件動(dòng)輒幾十甚至上百GB,每個(gè)文件都需要下載到本地才能查看。在多辦公室遠程辦公場(chǎng)景下,一個(gè)簡(jiǎn)單的文件重命名可能需要幾個(gè)小時(shí)才能下載到本地才能完成。
Dropbox、Google Drive、云盤(pán)等外部工具上傳下載需要大量的等待時(shí)間。對方上傳的文件在一段時(shí)間后下載鏈接失效,文件被刪除。這些都是很常見(jiàn)的問(wèn)題。更糟糕的是,如果文件沒(méi)有及時(shí)妥善備份,往往會(huì )給企業(yè)帶來(lái)巨大的經(jīng)濟損失,而實(shí)際案例更是數不勝數……
這些看似常規的數字資產(chǎn)的搜索、共享、傳輸和備份,往往浪費了太多的時(shí)間,消耗了太多的精力。
長(cháng)此以往,何談降本增效?
是時(shí)候做出一些改變了。
欲善其事,必先利其器
效率的提升離不開(kāi)先進(jìn)工具的幫助。
根據普華永道的一項調查,一款優(yōu)秀的數字資產(chǎn)管理軟件可以幫助被調查團隊在一年內節省一個(gè)月的制作時(shí)間,效率得到大幅提升。Share Creators智能數字資產(chǎn)管理系統就是這樣一款軟件。
Share Creators智能數字資產(chǎn)管理系統
無(wú)論是企業(yè)、團隊還是個(gè)人,無(wú)論團隊是遠程工作還是協(xié)同工作,我們都希望Share Creators強大、智能的數字資源管理系統能夠有效提高您和您團隊的工作效率。
先看一下demo:
申請免費試用:
簡(jiǎn)單理解,我們的產(chǎn)品就是“企業(yè)級谷歌”,可以高效的幫您備份、搜索、復用、版本控制之前所有的歷史資源和文檔:
1、AI智能搜索快速找到所需資源
Share Creators擁有業(yè)界領(lǐng)先的AI識別功能,可智能解析資源文件,讓您輕松找到所有文件。即使我們忘記給文件命名,也能被AI識別,隨時(shí)找到對應的資源。
同時(shí),強大的人工智能標簽結合自定義個(gè)人標簽庫+團隊標簽池功能,可大幅提升搜索精準度。
你覺(jué)得這就結束了嗎?Share Creators還提供了多種搜索方式,用戶(hù)可以通過(guò)顏色、名稱(chēng)、標簽、文件類(lèi)型、文件大小、橫豎排版、上傳時(shí)間等屬性進(jìn)行搜索。這些強大的搜索不僅限于圖像、PSD、視頻文件等內部文件,還包括 URL、Google Drive 等其他系統中的文件。
2.支持上百種資源格式在線(xiàn)高速預覽和即時(shí)反饋
Share Creators全面支持100多種資源格式,快速在線(xiàn)實(shí)時(shí)預覽。目前支持的格式包括:2D圖片、3D FBX/OBJ、2D-SPINE動(dòng)畫(huà)、視頻、音頻、PPT、word等。將支持Maya和3dmax在線(xiàn)觀(guān)看),輕松實(shí)現高速秒級在線(xiàn)預覽。
同時(shí),您還可以進(jìn)行查看回復、實(shí)時(shí)分享等多項操作。評論回復時(shí),只需停在3D模型或視頻的某一幀進(jìn)行標注反饋,非常方便。
3. 便捷易用的分享交流:外包商管理的利器
數字資產(chǎn)的共享是日常工作中使用頻率最高的功能之一。您可以直接從Share Creators界面選擇單個(gè)文件或共享整個(gè)文件夾內容,整個(gè)過(guò)程簡(jiǎn)單方便。
Share Creators新增訪(fǎng)客模式,充分滿(mǎn)足外部合作伙伴的接入需求,與外包商合作的進(jìn)度管理和審核變得更加得心應手。不再翻聊天記錄,回到原來(lái)的更新,卻發(fā)現文件已經(jīng)過(guò)期,無(wú)法下載。
同時(shí),當您對外共享數字資產(chǎn)時(shí),可以為共享內容設置只讀和可編輯兩種共享權限,在滿(mǎn)足不同需求的同時(shí),最大程度保護共享內容的安全。
在日常交流方面,Share Creators支持整合常用的交流工具。飛書(shū)、釘釘、企業(yè)微信、Slack等通訊工具都可以通過(guò)API方式集成到Share Creators中。這樣一來(lái),整個(gè)公司的組織人員就可以輕松導入。人員離職,只能在通訊工具中刪除,資產(chǎn)訪(fǎng)問(wèn)權限自動(dòng)關(guān)閉,無(wú)需管理雙方用戶(hù)列表。
4、從生產(chǎn)工具到游戲引擎,上下游全流程接入
Share Creators可以實(shí)現Photoshop、After Effect等上游制作工具的對接,Unity、Unreal等游戲引擎的對接,以及SVN、Perforce碼控等下游制作工具的對接(逐步上線(xiàn),部分軟件對接已有得到支持)。
Share Creators即將開(kāi)放更多API接口,實(shí)現設計和游戲行業(yè)常用軟件的深度融合,讓整個(gè)制作過(guò)程更加方便快捷。
5.一鍵輕松采集
資源
Share Creators強大的一鍵資源采集
功能,可以輕松幫助設計師解決資源采集
問(wèn)題。
點(diǎn)擊批量采集
,在網(wǎng)頁(yè)查看需要采集
的圖片,輕松完成一鍵采集
。選中的圖片會(huì )自動(dòng)保存在Share Creators個(gè)人文件夾中,供您日后使用。
Share Creators還有強大的頁(yè)面截圖和屏幕錄制功能。您可以選擇對頁(yè)面特定區域、頁(yè)面可見(jiàn)區域或整個(gè)頁(yè)面進(jìn)行一鍵截圖。
6、本地資源實(shí)時(shí)備份
Share Creators可以將本地資源實(shí)時(shí)同步到服務(wù)器,同時(shí)支持權限管理,最大程度降低資產(chǎn)不合理丟失的風(fēng)險;實(shí)時(shí)同步的文件也可以讓團隊成員輕松實(shí)現遠程或移動(dòng)辦公。
在Globee2022信息技術(shù)世界大獎的評選中,Share Creators智能數字資產(chǎn)管理系統成功斬獲三項大獎,其中,在年度數字資產(chǎn)管理軟件評選中,以極高的含金量成功摘得金獎。
目前,全球許多游戲開(kāi)發(fā)商和工作室都在使用Share Creators來(lái)提高他們的數字資產(chǎn)管理效率。無(wú)數事例表明,Share Creators智能數字資產(chǎn)管理系統已經(jīng)成為幫助他們降本增效的利器。
針對不同規模的團隊,Share Creators 提供了基于用戶(hù)數量的座位版本;針對大型企業(yè),Share Creators提供了不限制用戶(hù)數量的企業(yè)版。
這就是你苦苦尋找的提升工作效率的神器嗎?快來(lái)免費體驗Share Creators智能數字資產(chǎn)管理系統吧!
申請免費試用:
或者隨時(shí)聯(lián)系 查看全部
解決方案:服務(wù)器監控——Cacti(全新版)
MariaDB-client MariaDB-server
MariaDB-devel
PHP \//安裝 LAMP 架構 PHP-SNMP
php-ldap
php-pdo
php-mysql
php-devel
PHP-梨
PHP 通用
PHP-GD
php-mbstring
php-xml
php-process
Net-SNMP
net-snmp-utils
net-snmp-libs
net-snmp-agent-libs
net-snmp-devel
RRDTOOL
rrdtool-php
rrdtool-perl
RRDTOOL-devel
GCC OpenSSL-DEVEL
DOS2UNIX
自動(dòng)會(huì )議
自動(dòng)制作
Binutils libtool

CPP 后綴
glibc-headers
內核標頭
格利布-德維爾GD
GD-DEVEL
幫助2人
新冠酸酯
wget 補丁// 以上都是配置仙人掌所需的插件[root@aa ~]# vi /etc/httpd/conf/httpd.confServerName [root@aa ~]# vi /etc/httpd/
conf.d/php.confLoadModule php5_module modules/libphp5.so[root@aa ~]# vi /etc/php.inisafe_mode = off // Add date.timezone = PRC //Find modification [root@aa ~]# systemctl stop firewalld.service[root@aa ~]# setenforce 0[root@aa ~]# systemctl start httpd.service[root@aa ~]# systemctl start mariadb.service
成功啟動(dòng) [root@aa ~]#
mysql_secure_installation // 按照提示初步設置 Mariadb,設置密碼,刪除匿名用戶(hù),打開(kāi)根遠程登錄,刷新權限下方燈測試,先測試 PHP 健康狀態(tài) [root@aa ~]# vi /var/www/html/index.php // 加入測試頁(yè)面 Win10 訪(fǎng)問(wèn)
PHP 工作正常,以下測試數據庫連接 [root@aa ~]# mysql -uroot –p//登錄數據庫進(jìn)行測試帳戶(hù)仙人掌授權 MariaDB [(none)]> 創(chuàng )建數據庫 仙人掌字符集 utf8 整理utf8_bin;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'%' 由 'admin123' 標識;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'localhost' 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/index.php // 替換 Windows 10 訪(fǎng)問(wèn)的測試頁(yè)面
數據庫連接沒(méi)有問(wèn)題
---------可以開(kāi)始安裝 cacti--------------[root@aa ~]# tar xf cacti-1。26. .tar.gz[root@aa ~]# MV 仙人掌-1。1。26 /var/www/html/cacti[root@aa ~]# mysql -ucacti -p cacti < /var/www/html/cacti/cacti。sql輸入 password:// 密碼 admin123 將仙人掌的數據庫導入 [root@aa ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -urootmysql -pEnter password:// 密碼是abc123,1。1。cacti 版本 26 需要導入時(shí)間數據庫 [root@aa ~]# mysql -uroot –p//授予 cacti 用戶(hù)對時(shí)間數據庫 MariaDB [(none)] 的權限>授予 mysql 上的選擇。time_zone_name “cacti”@“l(fā)ocalhost” 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/cacti/include/config。
php$database_username = 'cacti'; $database_password = 'admin123';//要修改這兩個(gè)項目,數據庫不在本地計算機上,需要修改 $rdatabase 對應的條目并刪除注釋 [root@aa ~]# vi /etc/snmp/snmpd。 confcom2sec notConfigUser localhost public // 更改為環(huán)回地址 41access notConfigGroup “”anynoauth exact all none none// 將系統視圖更改為所有 62view 全部收錄
。180 // 刪除 # 符號 85[root@aa ~]# systemctl restart snmpd。service[root@aa ~]# systemctl enable snmpd。service[root@aa ~]# useradd -r -M cacti[root@aa ~]# chown -R cacti。cacti /var/www/html/cacti/rra/[root@aa ~]# chown -R cacti。
cacti /var/www/html/cacti/log/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/resource/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/cache[root@aa ~]# chown -R apache。Apache /var/www/html/cacti/scripts
-----------安裝仙人掌脊椎
為了優(yōu)化數據輪詢(xún)速度-----新版本的 Cacti 可以在沒(méi)有 PHP 腳本的情況下采集
數據,并且集成了一個(gè)新的插件 spine 用于采集
數據[root@aa ~]# rpm -ivh help2man-1.41.1-3.el7.noarch.rpm//install spine dependencies[root@aa ~]# ln -s /usr/ lib64/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so[root@aa ~]# tar xf cacti-spine-1.1.26.tar.gz[root@aa ~]# CD 仙人掌-脊柱-1.1.26[root@aa 仙人掌脊椎-1.1.26]# ./ 配置[root@aa 仙人掌脊-1.1.26]# 制作 &&制作 install[root@aa ~]# cp /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf[root@aa ~]# vi /usr/local/spine/ etc/spine.conf// 修改相關(guān)參數DB_HostlocalhostDB_DatabasecactiDB_UsercactiDB_Passadmin123DB_Port3306
RDB_HostlocalhostRDB_DatabasecactiRDB_UsercactiRDB_Passadmin123RDB_Port3306配置后,win10可以訪(fǎng)問(wèn)192.168.80.181/cacti/進(jìn)行安裝
發(fā)現沒(méi)有安裝mbstring和snmp,數據庫參數設置有問(wèn)題,我們來(lái)優(yōu)化一下

安裝兩個(gè)軟件包[root@aa ~]# rpm -ivh php-mbstring-5.4.16-42.el7.x86_64.rpm[root@aa ~]#
rpm -ivh php-snmp-5.4.16-42.el7.x86_64.rpm 轉到數據庫設置 [root@aa ~]# vi /etc/f.d/fcharacter_set_ 服務(wù)器 = utf8mb4collation_server = utf8mb4_unicode_cicharacter_set_client = utf8mb4max_connections = 100max_heap_table_size = 256Mmax_allowed_packet = 16777216join_buffer_size = 64Mtmp_table_size = 64Minnodb_file_per_table = ONinnodb_buffer_pool_size = 1024Minnodb_doublewrite = OFFinnodb_lock_wait_timeout = 50innodb_flush_log_at_timeout = 3innodb_read_io_線(xiàn)程 = 32innodb_write_io_threads = 16[root@aa ~]# 服務(wù) MariaDB 重啟[root@aa ~]# 服務(wù) httpd 重啟,然后訪(fǎng)問(wèn)網(wǎng)頁(yè)安裝
軟件包已安裝
數據庫配置沒(méi)有問(wèn)題,然后直接下一步
根據要求選擇安裝后,初始用戶(hù)名admin密碼admin,輸入后需要更改密碼,密碼有一定的復雜度,必須超過(guò)8位數字(必須收錄
大寫(xiě)小寫(xiě)字符)。
登錄成功----------------以下仙人掌監控設置------------------控制臺 -> 設置 -> 路徑 -> 在 Spine 配置文件路徑 /usr/local/spine/bin/spine 中填寫(xiě) spine 二進(jìn)制文件
位置文本框 在文件路徑文本框中填寫(xiě)配置文件路徑 /usr/local/spine/etc/spine.conf,然后單擊保存。
控制臺 ->設置 -> 輪詢(xún)器
-> 在輪詢(xún)器類(lèi)型下拉框中選擇脊柱,然后單擊保存。注意:如果使用 spine,則以下兩個(gè)輪換時(shí)間和計劃任務(wù)間隔應設置為每分鐘
添加設備和圖形后,需要重建采集
器緩存??刂婆_>系統實(shí)用程序>重建輪詢(xún)器緩存
點(diǎn)擊進(jìn)入以下屏幕,無(wú)需設置
仙人掌的基本配置之后,
你需要在服務(wù)器上添加一個(gè)定時(shí)任務(wù)來(lái)采集
數據(PHP 中定時(shí)任務(wù)的間隔是 5 分鐘,而我們使用 Spine 模式時(shí),定時(shí)任務(wù)的間隔是 1 分鐘)[root@aa cacti]# crontab –e*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php >> /tmp/ cacti_rrdtool.log我們去仙人掌檢查管理 ? 設備(設備)檢查 Linux 狀態(tài)為 UP, 注意不要著(zhù)急 脊椎方式剛開(kāi)始大約需要2-5分鐘,有快有慢
您可以在下面創(chuàng )建一個(gè)圖表來(lái)分析所選設備
選擇GO
然后直接選擇圖形查看仙人掌加工后的圖片
解決方案:降本增效利器?Share Creators智能數字資產(chǎn)管理系統真香!
降本增效似乎是一個(gè)持續而永恒的話(huà)題。尤其是今年,尤為重要~
疫情不知不覺(jué)已經(jīng)伴隨我們三年了。在各行各業(yè)都受到疫情沖擊較大的背景下,降本增效對于很多企業(yè)來(lái)說(shuō)不再是錦上添花,而可能是唯一的出路。
隨著(zhù)市場(chǎng)的縮小和競爭的加劇,在更加“體量”的行業(yè)環(huán)境下,如何通過(guò)提升自身效率來(lái)有效降低成本,是每個(gè)團隊都面臨的問(wèn)題。
什么是降低成本?如何提高效率?
要回答這個(gè)問(wèn)題,我先來(lái)看看各個(gè)團隊每天都在經(jīng)歷什么:
您是否經(jīng)常淹沒(méi)在充滿(mǎn)不同版本和各種文件的文件夾中?苦苦尋找,還是找不到最新的文件分享?當你終于找到自己需要的資源時(shí),往往需要通過(guò)不同的通訊軟件與內部同事和外部伙伴公開(kāi)分享。
簡(jiǎn)單計算一下,制作一個(gè)游戲角色需要2個(gè)月左右,目前國內平均制作價(jià)格為1000元/天,一個(gè)丟失的文件損失約4萬(wàn)元。你現在的公司能保證每個(gè)文件的流程文件和最終文件都能妥善備份,并且隨時(shí)可以找到嗎?
設計行業(yè)往往伴隨著(zhù)大量的數字資產(chǎn),文件種類(lèi)繁多,種類(lèi)繁多。一個(gè)CG 3D文件動(dòng)輒幾十甚至上百GB,每個(gè)文件都需要下載到本地才能查看。在多辦公室遠程辦公場(chǎng)景下,一個(gè)簡(jiǎn)單的文件重命名可能需要幾個(gè)小時(shí)才能下載到本地才能完成。
Dropbox、Google Drive、云盤(pán)等外部工具上傳下載需要大量的等待時(shí)間。對方上傳的文件在一段時(shí)間后下載鏈接失效,文件被刪除。這些都是很常見(jiàn)的問(wèn)題。更糟糕的是,如果文件沒(méi)有及時(shí)妥善備份,往往會(huì )給企業(yè)帶來(lái)巨大的經(jīng)濟損失,而實(shí)際案例更是數不勝數……
這些看似常規的數字資產(chǎn)的搜索、共享、傳輸和備份,往往浪費了太多的時(shí)間,消耗了太多的精力。
長(cháng)此以往,何談降本增效?
是時(shí)候做出一些改變了。
欲善其事,必先利其器
效率的提升離不開(kāi)先進(jìn)工具的幫助。
根據普華永道的一項調查,一款優(yōu)秀的數字資產(chǎn)管理軟件可以幫助被調查團隊在一年內節省一個(gè)月的制作時(shí)間,效率得到大幅提升。Share Creators智能數字資產(chǎn)管理系統就是這樣一款軟件。
Share Creators智能數字資產(chǎn)管理系統
無(wú)論是企業(yè)、團隊還是個(gè)人,無(wú)論團隊是遠程工作還是協(xié)同工作,我們都希望Share Creators強大、智能的數字資源管理系統能夠有效提高您和您團隊的工作效率。

先看一下demo:
申請免費試用:
簡(jiǎn)單理解,我們的產(chǎn)品就是“企業(yè)級谷歌”,可以高效的幫您備份、搜索、復用、版本控制之前所有的歷史資源和文檔:
1、AI智能搜索快速找到所需資源
Share Creators擁有業(yè)界領(lǐng)先的AI識別功能,可智能解析資源文件,讓您輕松找到所有文件。即使我們忘記給文件命名,也能被AI識別,隨時(shí)找到對應的資源。
同時(shí),強大的人工智能標簽結合自定義個(gè)人標簽庫+團隊標簽池功能,可大幅提升搜索精準度。
你覺(jué)得這就結束了嗎?Share Creators還提供了多種搜索方式,用戶(hù)可以通過(guò)顏色、名稱(chēng)、標簽、文件類(lèi)型、文件大小、橫豎排版、上傳時(shí)間等屬性進(jìn)行搜索。這些強大的搜索不僅限于圖像、PSD、視頻文件等內部文件,還包括 URL、Google Drive 等其他系統中的文件。
2.支持上百種資源格式在線(xiàn)高速預覽和即時(shí)反饋
Share Creators全面支持100多種資源格式,快速在線(xiàn)實(shí)時(shí)預覽。目前支持的格式包括:2D圖片、3D FBX/OBJ、2D-SPINE動(dòng)畫(huà)、視頻、音頻、PPT、word等。將支持Maya和3dmax在線(xiàn)觀(guān)看),輕松實(shí)現高速秒級在線(xiàn)預覽。
同時(shí),您還可以進(jìn)行查看回復、實(shí)時(shí)分享等多項操作。評論回復時(shí),只需停在3D模型或視頻的某一幀進(jìn)行標注反饋,非常方便。
3. 便捷易用的分享交流:外包商管理的利器
數字資產(chǎn)的共享是日常工作中使用頻率最高的功能之一。您可以直接從Share Creators界面選擇單個(gè)文件或共享整個(gè)文件夾內容,整個(gè)過(guò)程簡(jiǎn)單方便。
Share Creators新增訪(fǎng)客模式,充分滿(mǎn)足外部合作伙伴的接入需求,與外包商合作的進(jìn)度管理和審核變得更加得心應手。不再翻聊天記錄,回到原來(lái)的更新,卻發(fā)現文件已經(jīng)過(guò)期,無(wú)法下載。
同時(shí),當您對外共享數字資產(chǎn)時(shí),可以為共享內容設置只讀和可編輯兩種共享權限,在滿(mǎn)足不同需求的同時(shí),最大程度保護共享內容的安全。
在日常交流方面,Share Creators支持整合常用的交流工具。飛書(shū)、釘釘、企業(yè)微信、Slack等通訊工具都可以通過(guò)API方式集成到Share Creators中。這樣一來(lái),整個(gè)公司的組織人員就可以輕松導入。人員離職,只能在通訊工具中刪除,資產(chǎn)訪(fǎng)問(wèn)權限自動(dòng)關(guān)閉,無(wú)需管理雙方用戶(hù)列表。

4、從生產(chǎn)工具到游戲引擎,上下游全流程接入
Share Creators可以實(shí)現Photoshop、After Effect等上游制作工具的對接,Unity、Unreal等游戲引擎的對接,以及SVN、Perforce碼控等下游制作工具的對接(逐步上線(xiàn),部分軟件對接已有得到支持)。
Share Creators即將開(kāi)放更多API接口,實(shí)現設計和游戲行業(yè)常用軟件的深度融合,讓整個(gè)制作過(guò)程更加方便快捷。
5.一鍵輕松采集
資源
Share Creators強大的一鍵資源采集
功能,可以輕松幫助設計師解決資源采集
問(wèn)題。
點(diǎn)擊批量采集
,在網(wǎng)頁(yè)查看需要采集
的圖片,輕松完成一鍵采集
。選中的圖片會(huì )自動(dòng)保存在Share Creators個(gè)人文件夾中,供您日后使用。
Share Creators還有強大的頁(yè)面截圖和屏幕錄制功能。您可以選擇對頁(yè)面特定區域、頁(yè)面可見(jiàn)區域或整個(gè)頁(yè)面進(jìn)行一鍵截圖。
6、本地資源實(shí)時(shí)備份
Share Creators可以將本地資源實(shí)時(shí)同步到服務(wù)器,同時(shí)支持權限管理,最大程度降低資產(chǎn)不合理丟失的風(fēng)險;實(shí)時(shí)同步的文件也可以讓團隊成員輕松實(shí)現遠程或移動(dòng)辦公。
在Globee2022信息技術(shù)世界大獎的評選中,Share Creators智能數字資產(chǎn)管理系統成功斬獲三項大獎,其中,在年度數字資產(chǎn)管理軟件評選中,以極高的含金量成功摘得金獎。
目前,全球許多游戲開(kāi)發(fā)商和工作室都在使用Share Creators來(lái)提高他們的數字資產(chǎn)管理效率。無(wú)數事例表明,Share Creators智能數字資產(chǎn)管理系統已經(jīng)成為幫助他們降本增效的利器。
針對不同規模的團隊,Share Creators 提供了基于用戶(hù)數量的座位版本;針對大型企業(yè),Share Creators提供了不限制用戶(hù)數量的企業(yè)版。
這就是你苦苦尋找的提升工作效率的神器嗎?快來(lái)免費體驗Share Creators智能數字資產(chǎn)管理系統吧!
申請免費試用:
或者隨時(shí)聯(lián)系
解決方案:如何使用 SkyWalking 給 Dubbo 服務(wù)做鏈路追蹤?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2022-11-22 09:18
Skywalking監控截圖:
Apache Skywalking(孵化器)簡(jiǎn)介
Apache Skywalking (Incubator) 專(zhuān)為微服務(wù)架構和云原生架構系統設計,支持分布式鏈路跟蹤APM系統。Apache Skywalking(孵化器)通過(guò)加載探針采集
應用調用鏈接信息,對采集
到的調用鏈接信息進(jìn)行分析,生成應用間關(guān)系、服務(wù)間關(guān)系和服務(wù)指標。Apache Skywalking (Incubating) 目前支持多種語(yǔ)言,包括 Java、.Net Core、Node.js 和 Go 語(yǔ)言。
目前Skywalking已經(jīng)支持從6個(gè)可視化維度分析分布式系統的運行情況。
Dubbo與Apache Skywalking(孵化器)編寫(xiě)Dubbo示例程序
Dubbo示例程序已經(jīng)上傳到Github倉庫。方便大家下載使用。
API工程
服務(wù)接口:
package?org.apache.skywalking.demo.interfaces;<br /><br />public?interface?HelloService?{<br />????String?sayHello(String?name);<br />}<br />
Dubbo服務(wù)提供項目
package?org.apache.skywalking.demo.provider;<br /><br />@Service(version?=?"${demo.service.version}",<br />????application?=?"${dubbo.application.id}",<br />????protocol?=?"${dubbo.protocol.id}",<br />????registry?=?"${dubbo.registry.id}",?timeout?=?60000)<br />public?class?HelloServiceImpl?implements?HelloService?{<br /><br />????public?String?sayHello(String?name)?{<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));<br />????????return?"Hello,?"?+?name;<br />????}<br /><br />}<br />
消費者工程
package?org.apache.skywalking.demo.consumer;<br /><br />@RestController<br />public?class?ConsumerController?{<br /><br />????private?static?int?COUNT?=?0;<br /><br />????@Reference(version?=?"${demo.service.version}",<br />????????application?=?"${dubbo.application.id}",<br />????????url?=?"dubbo://localhost:20880",?timeout?=?60000)<br />????private?HelloService?helloService;<br /><br />????@GetMapping("/sayHello/{name}")<br />????public?String?sayHello(@PathVariable(name?=?"name")?String?name)?{<br />????????if?((COUNT++)?%?3?==?0){<br />????????????throw?new?RuntimeException();<br />????????}<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));<br />????????return?helloService.sayHello(name);<br />????}<br />}<br />
部署 Apache Skywalking(孵化器)
Apache Skywalking(孵化器)提供兩種部署模式:?jiǎn)喂濣c(diǎn)模式和集群模式。以下是單節點(diǎn)模式部署步驟。有關(guān)集群模式部署的詳細信息,請參閱文檔。
依賴(lài)第三方組件
JDK8+
彈性搜索 5.x
部署步驟
下載 Apache Skywalking 采集
器
部署彈性搜索
解壓縮并啟動(dòng) Skywalking Collector。運行 bin/startup.sh 命令啟動(dòng) Skywalking Collector
啟動(dòng)示例程序
在啟動(dòng)示例程序之前,先執行編譯打包命令:
./mvnw?clean?package<br />
啟動(dòng)服務(wù)提供者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-provider?-Dskywalking.collector.servers=localhost:10800?dubbo-provider/target/dubbo-provider.jar<br />
啟動(dòng)服務(wù)消費者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-consumer?-Dskywalking.collector.servers=localhost:10800?dubbo-consumer/target/dubbo-consumer.jar?<br />
獲得消費者提供的服務(wù)
curl?http://localhost:8080/sayHello/test<br />
Skywalking監控截圖:首頁(yè)
/admin-guide/images/skywalking-dashboard.png 拓撲圖
/admin-guide/images/skywalking-topology.png 應用視圖
/admin-guide/images/skywalking-application.png
JVM信息
/admin-guide/images/skywalking-application_instance.png 服務(wù)視圖
服務(wù)消費者:
/admin-guide/images/skywalking-service-consumer.png
服務(wù)提供者:
/admin-guide/images/skywalking-service-provider.png 跟蹤視圖
/admin-guide/images/skywalking-trace.png
跨度信息:
/admin-guide/images/skywalking-span-Info.png 報警視圖
/admin-guide/images/skywalking-alarm.png
歡迎加入我的知識星球,一起探討架構,交流源碼。要加入,請按住下面的二維碼:
知識星球上已更新源碼,分析如下:
目前,《Dubbo源碼解析》目錄已在知識星球更新如下:
01.調試環(huán)境搭建
02.項目結構一覽
03.配置配置
04.核心流程清單
05.擴展機制SPI
06.線(xiàn)程池
07.服務(wù)暴露Export
08. 服務(wù)參考 Refer
09.注冊處
10.動(dòng)態(tài)編譯
11. 動(dòng)態(tài)代理
12.服務(wù)調用Invoke
13.調用屬性
14.過(guò)濾器
15.NIO 服務(wù)器
16.P2P服務(wù)器
解決方案:OZON平臺產(chǎn)品審核不通過(guò)原因及產(chǎn)品上傳常見(jiàn)錯誤
OZON官方有兩種方式:?jiǎn)未紊蟼骱捅韱闻可蟼?。上傳后需要審核,目前是人工審核。很多賣(mài)家反映商品上傳后“拒絕更新”,即商品審核不通過(guò)。是什么原因?
首先,確保您的產(chǎn)品或品牌可以在OZON上銷(xiāo)售或不受限制。
二、首次上傳填寫(xiě)商品信息前,一定要逐項查看填寫(xiě)的提示,并查看平臺買(mǎi)家端的listing,可以有效避免出現明顯錯誤。
三、賣(mài)家上傳圖片錯誤較多。上傳前,他還查看了官方知識庫中給出的詳細上傳圖片要求。
以下是根據采集
到的買(mǎi)家反饋和實(shí)踐經(jīng)驗總結的產(chǎn)品上傳常見(jiàn)錯誤列表:
1.產(chǎn)品圖片:圖片底色偏暗或雜亂。上傳的時(shí)候主圖最好是無(wú)價(jià)的白底圖(灰底圖也可以),白色的東西可以深色,總之一定要干凈整潔,尤其是主圖,尺寸等信息不應該出現在圖片中,只展示商品的全部?jì)热?,也應該整體展示,而不是只展示商品的一部分。對于服裝,主要圖片應顯示在正面。
2. 多SKU:一個(gè)產(chǎn)品只能上傳一個(gè)SKU。主副圖顏色必須與SKU數量一致,同一商品不能出現多個(gè)SKU。請注意,這是一個(gè)嚴重的問(wèn)題。
3.商品分類(lèi):上傳商品時(shí)商品分類(lèi)選擇有問(wèn)題,分類(lèi)不確定。建議在買(mǎi)家網(wǎng)站上搜索并確認產(chǎn)品類(lèi)別后再進(jìn)行選擇。
4、品牌問(wèn)題:選擇沒(méi)有品牌的產(chǎn)品,但在產(chǎn)品欄目、圖片或說(shuō)明中顯示品牌信息,或產(chǎn)品品牌信息不一致。
5.產(chǎn)品描述:描述太短,尺寸大小不對,收錄
廣告信息。
最后,如果產(chǎn)品已上傳但未通過(guò)審核,將鼠標移到提醒編號上,系統通常會(huì )顯示失敗原因。 查看全部
解決方案:如何使用 SkyWalking 給 Dubbo 服務(wù)做鏈路追蹤?
Skywalking監控截圖:
Apache Skywalking(孵化器)簡(jiǎn)介
Apache Skywalking (Incubator) 專(zhuān)為微服務(wù)架構和云原生架構系統設計,支持分布式鏈路跟蹤APM系統。Apache Skywalking(孵化器)通過(guò)加載探針采集
應用調用鏈接信息,對采集
到的調用鏈接信息進(jìn)行分析,生成應用間關(guān)系、服務(wù)間關(guān)系和服務(wù)指標。Apache Skywalking (Incubating) 目前支持多種語(yǔ)言,包括 Java、.Net Core、Node.js 和 Go 語(yǔ)言。
目前Skywalking已經(jīng)支持從6個(gè)可視化維度分析分布式系統的運行情況。
Dubbo與Apache Skywalking(孵化器)編寫(xiě)Dubbo示例程序
Dubbo示例程序已經(jīng)上傳到Github倉庫。方便大家下載使用。
API工程
服務(wù)接口:
package?org.apache.skywalking.demo.interfaces;<br /><br />public?interface?HelloService?{<br />????String?sayHello(String?name);<br />}<br />
Dubbo服務(wù)提供項目
package?org.apache.skywalking.demo.provider;<br /><br />@Service(version?=?"${demo.service.version}",<br />????application?=?"${dubbo.application.id}",<br />????protocol?=?"${dubbo.protocol.id}",<br />????registry?=?"${dubbo.registry.id}",?timeout?=?60000)<br />public?class?HelloServiceImpl?implements?HelloService?{<br /><br />????public?String?sayHello(String?name)?{<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));<br />????????return?"Hello,?"?+?name;<br />????}<br /><br />}<br />
消費者工程
package?org.apache.skywalking.demo.consumer;<br /><br />@RestController<br />public?class?ConsumerController?{<br /><br />????private?static?int?COUNT?=?0;<br /><br />????@Reference(version?=?"${demo.service.version}",<br />????????application?=?"${dubbo.application.id}",<br />????????url?=?"dubbo://localhost:20880",?timeout?=?60000)<br />????private?HelloService?helloService;<br /><br />????@GetMapping("/sayHello/{name}")<br />????public?String?sayHello(@PathVariable(name?=?"name")?String?name)?{<br />????????if?((COUNT++)?%?3?==?0){<br />????????????throw?new?RuntimeException();<br />????????}<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));<br />????????return?helloService.sayHello(name);<br />????}<br />}<br />
部署 Apache Skywalking(孵化器)
Apache Skywalking(孵化器)提供兩種部署模式:?jiǎn)喂濣c(diǎn)模式和集群模式。以下是單節點(diǎn)模式部署步驟。有關(guān)集群模式部署的詳細信息,請參閱文檔。
依賴(lài)第三方組件
JDK8+
彈性搜索 5.x
部署步驟
下載 Apache Skywalking 采集
器
部署彈性搜索
解壓縮并啟動(dòng) Skywalking Collector。運行 bin/startup.sh 命令啟動(dòng) Skywalking Collector
啟動(dòng)示例程序
在啟動(dòng)示例程序之前,先執行編譯打包命令:

./mvnw?clean?package<br />
啟動(dòng)服務(wù)提供者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-provider?-Dskywalking.collector.servers=localhost:10800?dubbo-provider/target/dubbo-provider.jar<br />
啟動(dòng)服務(wù)消費者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-consumer?-Dskywalking.collector.servers=localhost:10800?dubbo-consumer/target/dubbo-consumer.jar?<br />
獲得消費者提供的服務(wù)
curl?http://localhost:8080/sayHello/test<br />
Skywalking監控截圖:首頁(yè)
/admin-guide/images/skywalking-dashboard.png 拓撲圖
/admin-guide/images/skywalking-topology.png 應用視圖
/admin-guide/images/skywalking-application.png
JVM信息
/admin-guide/images/skywalking-application_instance.png 服務(wù)視圖
服務(wù)消費者:
/admin-guide/images/skywalking-service-consumer.png
服務(wù)提供者:
/admin-guide/images/skywalking-service-provider.png 跟蹤視圖
/admin-guide/images/skywalking-trace.png

跨度信息:
/admin-guide/images/skywalking-span-Info.png 報警視圖
/admin-guide/images/skywalking-alarm.png
歡迎加入我的知識星球,一起探討架構,交流源碼。要加入,請按住下面的二維碼:
知識星球上已更新源碼,分析如下:
目前,《Dubbo源碼解析》目錄已在知識星球更新如下:
01.調試環(huán)境搭建
02.項目結構一覽
03.配置配置
04.核心流程清單
05.擴展機制SPI
06.線(xiàn)程池
07.服務(wù)暴露Export
08. 服務(wù)參考 Refer
09.注冊處
10.動(dòng)態(tài)編譯
11. 動(dòng)態(tài)代理
12.服務(wù)調用Invoke
13.調用屬性
14.過(guò)濾器
15.NIO 服務(wù)器
16.P2P服務(wù)器
解決方案:OZON平臺產(chǎn)品審核不通過(guò)原因及產(chǎn)品上傳常見(jiàn)錯誤
OZON官方有兩種方式:?jiǎn)未紊蟼骱捅韱闻可蟼?。上傳后需要審核,目前是人工審核。很多賣(mài)家反映商品上傳后“拒絕更新”,即商品審核不通過(guò)。是什么原因?
首先,確保您的產(chǎn)品或品牌可以在OZON上銷(xiāo)售或不受限制。
二、首次上傳填寫(xiě)商品信息前,一定要逐項查看填寫(xiě)的提示,并查看平臺買(mǎi)家端的listing,可以有效避免出現明顯錯誤。

三、賣(mài)家上傳圖片錯誤較多。上傳前,他還查看了官方知識庫中給出的詳細上傳圖片要求。
以下是根據采集
到的買(mǎi)家反饋和實(shí)踐經(jīng)驗總結的產(chǎn)品上傳常見(jiàn)錯誤列表:
1.產(chǎn)品圖片:圖片底色偏暗或雜亂。上傳的時(shí)候主圖最好是無(wú)價(jià)的白底圖(灰底圖也可以),白色的東西可以深色,總之一定要干凈整潔,尤其是主圖,尺寸等信息不應該出現在圖片中,只展示商品的全部?jì)热?,也應該整體展示,而不是只展示商品的一部分。對于服裝,主要圖片應顯示在正面。
2. 多SKU:一個(gè)產(chǎn)品只能上傳一個(gè)SKU。主副圖顏色必須與SKU數量一致,同一商品不能出現多個(gè)SKU。請注意,這是一個(gè)嚴重的問(wèn)題。

3.商品分類(lèi):上傳商品時(shí)商品分類(lèi)選擇有問(wèn)題,分類(lèi)不確定。建議在買(mǎi)家網(wǎng)站上搜索并確認產(chǎn)品類(lèi)別后再進(jìn)行選擇。
4、品牌問(wèn)題:選擇沒(méi)有品牌的產(chǎn)品,但在產(chǎn)品欄目、圖片或說(shuō)明中顯示品牌信息,或產(chǎn)品品牌信息不一致。
5.產(chǎn)品描述:描述太短,尺寸大小不對,收錄
廣告信息。
最后,如果產(chǎn)品已上傳但未通過(guò)審核,將鼠標移到提醒編號上,系統通常會(huì )顯示失敗原因。
分享文章:織夢(mèng)CMS實(shí)現復制文章自動(dòng)加出處信息(織夢(mèng)文章調用標簽)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 78 次瀏覽 ? 2022-11-21 02:29
如果你發(fā)現自己辛辛苦苦創(chuàng )作的很多文章被別人復制或采集
,沒(méi)有留下一個(gè)鏈接,你會(huì )不會(huì )非常生氣和郁悶?好在我們還有一些基本的保護措施可以減少損失,那就是使用javascript來(lái)實(shí)現對文章原作者的基本版權保護。復制或采集
時(shí),會(huì )自動(dòng)添加文章出處。其實(shí)這個(gè)功能的實(shí)現代碼很簡(jiǎn)單,只需要在內容頁(yè)模板(article_*.htm)的區域添加代碼即可:
document.body.oncopy = function (){
<p>
setTimeout(function (){
var text = clipboardData.getData("text");
if (text){
texttext = text + "rn本文轉載于{dede:global.cfg_webname/}:{dede:global.cfg_basehost/}-原文鏈接:"+location.href;
clipboardData.setData("text", text);
}
},100)
}
</p>
嗯,趕快試試吧!
技巧:什么工具可以輸入關(guān)鍵詞自動(dòng)生成文章?
一、文章采集工具來(lái)源
文章采集、聚合、二次收錄、權重站維護程序
普通的文章采集、批量采集和發(fā)布已經(jīng)不能滿(mǎn)足搜索引擎的需求。懂基本百度相似度算法simhash算法的人應該都做過(guò)文章相似度檢測。經(jīng)過(guò)我的實(shí)際測試,大部分偽原創(chuàng )文章搜索引擎都可以識別文章,真正優(yōu)質(zhì)的文章不僅要原創(chuàng ),還要有完整的語(yǔ)義,能夠完全幫助用戶(hù)解決問(wèn)題。比如像一個(gè)短視頻平臺,如果一個(gè)視頻從頭到尾都是廢話(huà),沒(méi)有回答開(kāi)頭提出的問(wèn)題,那你是不是要評論噴作者廢話(huà),跑題了;所以文章實(shí)用,第一時(shí)間解決用戶(hù)心中的疑惑,這是一篇好文章,
今天我們就來(lái)看看自媒體文章采集工具:
現在比較實(shí)用的媒體文章采集工具有易寫(xiě)文章采集工具,可以批量采集媒體文章,可以選擇不同的媒體平臺,還可以選擇內容發(fā)布時(shí)間,輸入你要搜索的內容即可 關(guān)鍵詞,可以獲得很多相關(guān)的內容素材,可以選擇下載,視頻采集方法同理。
什么是自媒體文章采集工具?
自媒體文章采集工具,顧名思義,就是一款可以采集自媒體文章的工具。
本工具可以采集
海量文章和圖片,為你的創(chuàng )作帶來(lái)靈感,操作簡(jiǎn)單方便。
對于素材需求高的工作室和公司,使用這個(gè)工具會(huì )節省很多時(shí)間。
2、趣快拍AI搜索聚合文章及問(wèn)答采集工具
通過(guò)整合百度(百度知乎)、搜狗(搜狗問(wèn)答)、360(360問(wèn)答)、新浪(新浪愛(ài)客)、今日頭條(悟空問(wèn)答)、知乎(知乎問(wèn)答、知乎話(huà)題)以及自媒體平臺今日頭條,搜狐、百家號利用自動(dòng)語(yǔ)義檢測算法、相似度檢測算法、段落拆分與組合,將不同文章中語(yǔ)義最接近的段落進(jìn)行整合,生成聚合優(yōu)質(zhì)文章。第一,可以滿(mǎn)足百度的相似度算法;原創(chuàng )優(yōu)質(zhì)文章段落,三是可以自定義內容模板,增加內容模板的原創(chuàng )性,這是普通采集工具無(wú)法企及的。
問(wèn)答聚合文章
網(wǎng)站日常秒收三、文章收錄工具聚合程序介紹
支持Google SEO文章生成100多種語(yǔ)言的外貿軟文,支持開(kāi)源CMS自動(dòng)發(fā)布。(目前支持zblog、WordPress、織夢(mèng)cms、帝國cms、迅銳cms、小旋風(fēng)蜘蛛池等自動(dòng)收發(fā)布自動(dòng)上傳),支持文章定時(shí)定量發(fā)布,支持html與純文本相互轉換。通過(guò)IF-TDF算法、simHash、NLP、段落分詞、完備的語(yǔ)義檢測算法,匹配優(yōu)質(zhì)內容,多搜索引擎內容聚合,提高內容原創(chuàng )性和可讀性;同時(shí)可以自定義內容模板,實(shí)現內容模板頁(yè)面的多樣性原創(chuàng )。
AI搜索提取文章合集
------------------by文子seo-button: 61910465----------------
[配置]
;搜索引擎(單篇文章模板只能設置這個(gè))
searchengine=知乎、今日頭條、新浪、百度、搜狗、360
;采集頁(yè)數(默認采集第一頁(yè),多頁(yè)會(huì )影響文章生成速度)
頁(yè)=1
;文本長(cháng)度(采集內容不得低于此文本長(cháng)度)
字符長(cháng)度=20
;標題樣式(關(guān)鍵詞和聯(lián)想詞不可移動(dòng))
titletype=關(guān)鍵詞 聯(lián)想詞
;同一篇文章允許被調用的次數
時(shí)間 = 3
;是否刪除原圖
delimg=否
;平臺名稱(chēng),
;z-blog 自動(dòng)發(fā)布:z-blog;
;帝國自動(dòng)發(fā)布:diguo
;織夢(mèng)自動(dòng)發(fā)布:dede;
;wordpress 自動(dòng)發(fā)布:wordpress;
;小旋風(fēng)式文章; 小軒風(fēng);
;迅銳CMS自動(dòng)發(fā)布:xunrui;
;留空會(huì )把生成的文章保存到shengcheng文件夾
平臺=z-博客
;生成的文章數
publish_num=1000
;發(fā)布間隔秒
發(fā)布時(shí)間=300
;定時(shí)更新,每天固定時(shí)間運行程序(如果不定時(shí),留空即可)
固定時(shí)間=
;是否打開(kāi)全文翻譯成英文,翻譯是yes,不翻譯是no
翻譯=否
;自動(dòng)檢測要翻譯的語(yǔ)言,默認auto
sl=自動(dòng)
tl=en
;html是否轉為文本格式,轉為yes,不轉為no
html_text=否 查看全部
分享文章:織夢(mèng)CMS實(shí)現復制文章自動(dòng)加出處信息(織夢(mèng)文章調用標簽)
如果你發(fā)現自己辛辛苦苦創(chuàng )作的很多文章被別人復制或采集
,沒(méi)有留下一個(gè)鏈接,你會(huì )不會(huì )非常生氣和郁悶?好在我們還有一些基本的保護措施可以減少損失,那就是使用javascript來(lái)實(shí)現對文章原作者的基本版權保護。復制或采集
時(shí),會(huì )自動(dòng)添加文章出處。其實(shí)這個(gè)功能的實(shí)現代碼很簡(jiǎn)單,只需要在內容頁(yè)模板(article_*.htm)的區域添加代碼即可:
document.body.oncopy = function (){
<p>

setTimeout(function (){
var text = clipboardData.getData("text");
if (text){
texttext = text + "rn本文轉載于{dede:global.cfg_webname/}:{dede:global.cfg_basehost/}-原文鏈接:"+location.href;
clipboardData.setData("text", text);

}
},100)
}
</p>
嗯,趕快試試吧!
技巧:什么工具可以輸入關(guān)鍵詞自動(dòng)生成文章?
一、文章采集工具來(lái)源
文章采集、聚合、二次收錄、權重站維護程序
普通的文章采集、批量采集和發(fā)布已經(jīng)不能滿(mǎn)足搜索引擎的需求。懂基本百度相似度算法simhash算法的人應該都做過(guò)文章相似度檢測。經(jīng)過(guò)我的實(shí)際測試,大部分偽原創(chuàng )文章搜索引擎都可以識別文章,真正優(yōu)質(zhì)的文章不僅要原創(chuàng ),還要有完整的語(yǔ)義,能夠完全幫助用戶(hù)解決問(wèn)題。比如像一個(gè)短視頻平臺,如果一個(gè)視頻從頭到尾都是廢話(huà),沒(méi)有回答開(kāi)頭提出的問(wèn)題,那你是不是要評論噴作者廢話(huà),跑題了;所以文章實(shí)用,第一時(shí)間解決用戶(hù)心中的疑惑,這是一篇好文章,
今天我們就來(lái)看看自媒體文章采集工具:
現在比較實(shí)用的媒體文章采集工具有易寫(xiě)文章采集工具,可以批量采集媒體文章,可以選擇不同的媒體平臺,還可以選擇內容發(fā)布時(shí)間,輸入你要搜索的內容即可 關(guān)鍵詞,可以獲得很多相關(guān)的內容素材,可以選擇下載,視頻采集方法同理。
什么是自媒體文章采集工具?
自媒體文章采集工具,顧名思義,就是一款可以采集自媒體文章的工具。
本工具可以采集
海量文章和圖片,為你的創(chuàng )作帶來(lái)靈感,操作簡(jiǎn)單方便。
對于素材需求高的工作室和公司,使用這個(gè)工具會(huì )節省很多時(shí)間。
2、趣快拍AI搜索聚合文章及問(wèn)答采集工具
通過(guò)整合百度(百度知乎)、搜狗(搜狗問(wèn)答)、360(360問(wèn)答)、新浪(新浪愛(ài)客)、今日頭條(悟空問(wèn)答)、知乎(知乎問(wèn)答、知乎話(huà)題)以及自媒體平臺今日頭條,搜狐、百家號利用自動(dòng)語(yǔ)義檢測算法、相似度檢測算法、段落拆分與組合,將不同文章中語(yǔ)義最接近的段落進(jìn)行整合,生成聚合優(yōu)質(zhì)文章。第一,可以滿(mǎn)足百度的相似度算法;原創(chuàng )優(yōu)質(zhì)文章段落,三是可以自定義內容模板,增加內容模板的原創(chuàng )性,這是普通采集工具無(wú)法企及的。
問(wèn)答聚合文章
網(wǎng)站日常秒收三、文章收錄工具聚合程序介紹
支持Google SEO文章生成100多種語(yǔ)言的外貿軟文,支持開(kāi)源CMS自動(dòng)發(fā)布。(目前支持zblog、WordPress、織夢(mèng)cms、帝國cms、迅銳cms、小旋風(fēng)蜘蛛池等自動(dòng)收發(fā)布自動(dòng)上傳),支持文章定時(shí)定量發(fā)布,支持html與純文本相互轉換。通過(guò)IF-TDF算法、simHash、NLP、段落分詞、完備的語(yǔ)義檢測算法,匹配優(yōu)質(zhì)內容,多搜索引擎內容聚合,提高內容原創(chuàng )性和可讀性;同時(shí)可以自定義內容模板,實(shí)現內容模板頁(yè)面的多樣性原創(chuàng )。

AI搜索提取文章合集
------------------by文子seo-button: 61910465----------------
[配置]
;搜索引擎(單篇文章模板只能設置這個(gè))
searchengine=知乎、今日頭條、新浪、百度、搜狗、360
;采集頁(yè)數(默認采集第一頁(yè),多頁(yè)會(huì )影響文章生成速度)
頁(yè)=1
;文本長(cháng)度(采集內容不得低于此文本長(cháng)度)
字符長(cháng)度=20
;標題樣式(關(guān)鍵詞和聯(lián)想詞不可移動(dòng))
titletype=關(guān)鍵詞 聯(lián)想詞
;同一篇文章允許被調用的次數
時(shí)間 = 3
;是否刪除原圖
delimg=否
;平臺名稱(chēng),
;z-blog 自動(dòng)發(fā)布:z-blog;
;帝國自動(dòng)發(fā)布:diguo
;織夢(mèng)自動(dòng)發(fā)布:dede;

;wordpress 自動(dòng)發(fā)布:wordpress;
;小旋風(fēng)式文章; 小軒風(fēng);
;迅銳CMS自動(dòng)發(fā)布:xunrui;
;留空會(huì )把生成的文章保存到shengcheng文件夾
平臺=z-博客
;生成的文章數
publish_num=1000
;發(fā)布間隔秒
發(fā)布時(shí)間=300
;定時(shí)更新,每天固定時(shí)間運行程序(如果不定時(shí),留空即可)
固定時(shí)間=
;是否打開(kāi)全文翻譯成英文,翻譯是yes,不翻譯是no
翻譯=否
;自動(dòng)檢測要翻譯的語(yǔ)言,默認auto
sl=自動(dòng)
tl=en
;html是否轉為文本格式,轉為yes,不轉為no
html_text=否
解決方案:CN113726526A_人臉數據采集、驗證的方法、設備及系統在審
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-11-20 08:17
人臉數據采集、驗證的方法、設備及系統
技術(shù)領(lǐng)域
本申請涉及信息技術(shù)領(lǐng)域,尤其涉及一種人臉數據采集、驗證的方法、設備及系統。
背景技術(shù)
隨著(zhù)信息技術(shù)的發(fā)展,越來(lái)越多的場(chǎng)景中會(huì )使用到人臉識別技術(shù)。在使用人臉識別技術(shù)時(shí),首先需要采集人臉數據,然后將采集到的人臉數據發(fā)送給處理設備中進(jìn)行人臉識別。該上述過(guò)程中存在著(zhù)人臉數據重放攻擊風(fēng)險,即攻擊者使用此前交易中截獲的人臉數據,或者在其他渠道獲取的用戶(hù)人臉數據,在人臉識別的通訊報文中進(jìn)行替換,從而偽冒用戶(hù)達到欺騙識別設備的目的。目前的解決方案一般是通過(guò)對報文完整性的保護來(lái)進(jìn)行防范,如使用報文簽名或者計算報文MAC(Media Access Control,介質(zhì)訪(fǎng)問(wèn)控制)地址的方式,但是此種并不能從采集源頭上防止重放攻擊,仍然存在一定的安全風(fēng)險。
發(fā)明內容
本申請的一個(gè)目的是提供一種人臉數據采集、驗證的方案,用以解決現有方案中無(wú)法從采集源頭上防止了重放攻擊的問(wèn)題。
本申請實(shí)施例提供了一種人臉數據采集方法,所述方法包括:
采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
本申請實(shí)施例還提供了一種人臉數據驗證方法,所述方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
所述人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
采集設備獲取所述隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集的采集設備,所述采集設備包括:
數據接收裝置,用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;
視頻采集模塊,用于采集人臉樣本;
人臉輸出模塊,用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,其中,所述人臉識別服務(wù)器包括:
數據收發(fā)模塊,用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
數據處理模塊,用于生成所述隨機數,對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證,在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,該系統包括:
采集設備,用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
人臉識別服務(wù)器,用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種計算設備,該設備包括用于存儲計算機程序指令的存儲器和用于執行計算機程序指令的處理器,其中,當該計算機程序指令被該處理器執行時(shí),觸發(fā)所述設備執行所述的方法。
此外,本申請實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現所述的方法。
本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會(huì )變得更明顯:
圖1為本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程圖;
圖2為本申請實(shí)施例中可信人臉數據的一種數據構成示意圖;
圖3為本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程圖;
圖4為采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程圖;
圖5為本申請實(shí)施例提供的一種人臉數據采集和驗證的方法的處理流程圖;
圖6為本申請實(shí)施例提供的另一種人臉數據采集和驗證的方法的處理流程圖;
圖7為本申請實(shí)施例提供的一種計算設備的結構示意圖;
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實(shí)施方式
下面結合附圖對本申請作進(jìn)一步詳細描述。
在本申請一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò )的設備均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò )接口和內存。
內存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性?xún)却娴刃问?,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體,可以由任何方法或技術(shù)來(lái)實(shí)現信息存儲。信息可以是計算機可讀指令、數據結構、程序的裝置或其他數據。計算機的存儲介質(zhì)的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動(dòng)態(tài)隨機存取存儲器(DRAM)、其他類(lèi)型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術(shù)、只讀光盤(pán)(CD-ROM)、數字多功能光盤(pán)(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤(pán)存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪(fǎng)問(wèn)的信息。
本申請實(shí)施例提供了一種人臉數據采集及驗證方法,由采集設備實(shí)現人臉數據的采集,并由人臉識別服務(wù)器實(shí)現人臉數據的驗證,該方案在采集設備上就對人臉樣本添加了用于校驗的內容,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
在實(shí)際場(chǎng)景中,所述采集設備可以是具有視頻采集及信息處理功能的電子設備,例如收錄
攝像頭以及數據處理芯片的設備。其中,所述攝像頭可以是能夠采集彩色圖像的普通攝像頭,或者也可以是能夠采集深度信息、紅外信息等額外信息的攝像頭。所述人臉識別服務(wù)器在實(shí)現時(shí)可以包括但不限于單個(gè)網(wǎng)絡(luò )服務(wù)器、多個(gè)網(wǎng)絡(luò )服務(wù)器集或基于云計算的計算機集合等實(shí)現,可以用于實(shí)現設置鬧鐘時(shí)的部分處理功能。在此,云由基于云計算(Cloud Computing)的大量主機或網(wǎng)絡(luò )服務(wù)器構成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個(gè)虛擬計算機。
圖1示出了本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程,包括以下處理步驟:
步驟S101,采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本。所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
步驟S102,采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。其中,所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
步驟S103,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
圖3示出了本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程,包括以下處理步驟:
步驟S301,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
步驟S302,人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得。
步驟S303,人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證。其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
步驟S304,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
步驟S305,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數進(jìn)行驗證,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。由此,人臉識別服務(wù)器在生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備時(shí),可以接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,而后根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
圖4示出了采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程,具體流程包括準備階段和使用階段。其中,準備階段的流程如下:
P1)為采集設備配置設備ID(即設備標識)和設備可信密鑰對,其中設備ID是與每臺采集設備一一對應的,設備可信密鑰對可以是每臺采集設備一套,也可以是一批次采集設備共享一套。在使用階段之前,將設備ID和其對應的設備可信密鑰對中的設備公鑰上傳到可信管理服務(wù)器上。
P2)采集設備在出廠(chǎng)時(shí),在每一臺采集設備寫(xiě)入其對應的設備ID,用來(lái)唯一標識該采集設備;另外,需要在采集設備中寫(xiě)入設備可信密鑰對的設備私鑰以及對應的設備公鑰證書(shū)。
P3)人臉識別服務(wù)器從可信管理服務(wù)器獲取到其用以簽發(fā)設備公鑰證書(shū)的私鑰所對應的公鑰。
使用階段的流程如下:
S1)用戶(hù)在本地業(yè)務(wù)終端上發(fā)起業(yè)務(wù)請求,例如實(shí)際場(chǎng)景中可以是人臉認證、人臉識別等與需要基于人臉數據實(shí)現的業(yè)務(wù)請求,本地業(yè)務(wù)終端從人臉識別服務(wù)器請求一個(gè)隨機數;
S2)本地業(yè)務(wù)終端調用采集設備對用戶(hù)進(jìn)行人臉采集,并將隨機數發(fā)送給采集設備;
S3)采集設備對用戶(hù)人臉的原創(chuàng )
樣本進(jìn)行采集后,經(jīng)過(guò)質(zhì)量判斷和活體檢測后,作為人臉樣本與設備標識、傳入的隨機數等信息一起使用設備私鑰進(jìn)行簽名,獲得人臉數據簽名,然后與收錄
設備公鑰的數字證書(shū)一起形成可信人臉數據后,返回給本地業(yè)務(wù)終端。
S4)本地業(yè)務(wù)終端將獲得的可信人臉數據塊送至人臉識別服務(wù)器進(jìn)行處理。
S5)人臉識別服務(wù)器對可信人臉數據進(jìn)行驗證,具體方法為:先使用可信管理服務(wù)器公鑰驗證可信人臉數據中附帶的數字證書(shū)的合法性。如果驗證通過(guò),則使用該數字證書(shū)中的設備公鑰,驗證可信人臉數據中的人臉數據簽名的合法性。如果驗證通過(guò),則驗證可信人臉數據中的隨機數與人臉識別服務(wù)器生成并保存的隨機數是否一致。如果一致,則認為驗證通過(guò),可以使用該可信人臉數據中的人臉樣本進(jìn)行后續業(yè)務(wù)處理,例如進(jìn)行人臉注冊或者人臉識別等;
S6)人臉識別服務(wù)器返回處理結果給本地業(yè)務(wù)終端,例如人臉注冊或者人臉識別的結果是否成功。
基于前述人臉數據的采集方案和驗證方案,本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法所涉及的人臉識別服務(wù)器和采集設備的交互過(guò)程如下圖5所示,包括如下步驟:
步驟S501,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
步驟S502,采集設備獲取所述隨機數,并采集人臉樣本;
步驟S503,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S504,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S505,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據;
步驟S506,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S507,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S508,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的一些實(shí)施例中,實(shí)現人臉數據采集和驗證的方法時(shí),還可以包括本地業(yè)務(wù)終端,所述本地業(yè)務(wù)終端與人臉識別服務(wù)器、采集設備之間的交互過(guò)程如下圖6所示,包括如下步驟:
步驟S601,本地業(yè)務(wù)終端獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令;
步驟S602,本地業(yè)務(wù)終端向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;
步驟S603,人臉識別服務(wù)器根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數;
步驟S604,人臉識別服務(wù)器向所述本地業(yè)務(wù)終端返回所述隨機數;
步驟S605,本地業(yè)務(wù)終端向所述采集設備發(fā)送采集調用指令和所述隨機數;
步驟S606,采集設備獲取所述隨機數,并根據采集調用指令采集人臉樣本;
步驟S607,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S608,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S609,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。采集設備在生成可信人臉數據之后,可以先將其發(fā)送給本地業(yè)務(wù)終端,再由本地業(yè)務(wù)終端將可信人臉數據發(fā)送至人臉識別服務(wù)器。
步驟S610,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S611,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S612,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
基于同一發(fā)明構思,本申請實(shí)施例中還提供了用于人臉數據采集的采集設備、用于人臉數據驗證的人臉識別服務(wù)器以及用于實(shí)現人臉數據采集和驗證的系統,所述采集設備、人臉識別服務(wù)器和系統對應的方法是前述實(shí)施例中相應方法,并且其解決問(wèn)題的原理與該方法相似。
本申請實(shí)施例提供的一種用于人臉數據采集的采集設備的結構可以至少包括數據接收裝置、視頻采集模塊和人臉輸出模塊。其中,所述數據接收裝置用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;所述視頻采集模塊用于采集人臉樣本;所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
由此,本申請的一些實(shí)施例中,所述視頻采集模塊可以包括采集單元和檢測評估單元,所述采集單元用于采集人臉的原創(chuàng )
樣本,而所述檢測評估單元用于對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在獲得待簽名數據和人臉數據簽名之后,人臉輸出模塊可以根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。由此,本申請的一些實(shí)施例中,所述采集設備還可以包括數據接收模塊,該數據接收模塊用于在獲取人臉的原創(chuàng )
樣本之前,獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,該人臉識別服務(wù)器可以包括數據收發(fā)模塊和數據處理模塊。其中,數據收發(fā)模塊用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得人臉數據簽名。
所述數據處理模塊用于生成所述隨機數,以及根據可信人臉數據進(jìn)行各種驗證,包括用于對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證、使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證以及對校驗數據進(jìn)行校驗數據驗證。
其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器的數據處理模塊使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器的數據處理模塊對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,所述數據收發(fā)模塊還用于接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,并向所述本地業(yè)務(wù)終端返回隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備;所述數據處理模塊還用于根據所述隨機數獲取請求生成隨機數。即用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。
此外,本申請的一些實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,系統至少包括采集設備和人臉識別服務(wù)器。
采集設備用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
人臉識別服務(wù)器則用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請的另一實(shí)施例中,所述該系統還可以包括本地業(yè)務(wù)終端。所述本地業(yè)務(wù)終端用于獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令,并向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;以及向所述采集設備發(fā)送采集調用指令和所述隨機數。
所述采集裝置在采集人臉樣本時(shí),可以根據所述采集調用指令采集人臉樣本;而所述人臉識別服務(wù)器在提供隨機數時(shí),可以根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
綜上所述,本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
另外,本申請的一部分可被應用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執行時(shí),通過(guò)該計算機的操作,可以調用或提供根據本申請的方法和/或技術(shù)方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一些實(shí)施例包括一個(gè)如圖7所示的計算設備,該設備包括存儲有計算機可讀指令的一個(gè)或多個(gè)存儲器710和用于執行計算機可讀指令的處理器720,其中,當該計算機可讀指令被該處理器執行時(shí),使得所述設備執行基于前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
此外,本申請的一些實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專(zhuān)用集成電路(ASIC)、通用目的計算機或任何其他類(lèi)似硬件設備來(lái)實(shí)現。在一些實(shí)施例中,本申請的軟件程序可以通過(guò)處理器執行以實(shí)現上文步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數據結構)可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅動(dòng)器或軟磁盤(pán)及類(lèi)似設備。另外,本申請的一些步驟或功能可采用硬件來(lái)實(shí)現,例如,作為與處理器配合從而執行各個(gè)步驟或功能的電路。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細節,而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現本申請。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權利要求而不是上述說(shuō)明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數不排除復數。裝置權利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現。第一,第二等詞語(yǔ)用來(lái)表示名稱(chēng),而并不表示任何特定的順序。
整套解決方案:優(yōu)采云
采集器之PBOOTCMS入庫
網(wǎng)上已經(jīng)有優(yōu)采云
采集
器的使用方法。
我正在使用從云端下載的 優(yōu)采云
PBOOTCMS 規則。但是在使用的時(shí)候發(fā)現在存儲選擇中只能存儲新聞中心、新聞動(dòng)態(tài)和公司動(dòng)態(tài)三個(gè)類(lèi)別。
今天我們就來(lái)說(shuō)說(shuō)如何修改存儲列。順帶從頭到尾說(shuō)說(shuō)優(yōu)采云
的使用方法。
大哥step:下載插件。
首先我們在后臺云平臺上搜索PBOOT找到這個(gè)插件,然后下載。
看一下,這里可以看到一個(gè)APP的logo:PbootDemoSkycaiji
這個(gè)方法就是下載官方插件的方法?;蛘?,您可以自己發(fā)布一個(gè)插件。
自己發(fā)布還是官方下載都無(wú)所謂。如果不是很熟悉,直接使用官方插件即可。
第 2 步:讓我們創(chuàng )建一個(gè)新任務(wù)。
你可以隨意填寫(xiě)。
然后點(diǎn)擊:采集器設置
根據需要填寫(xiě)這些內容。
然后設置其他三個(gè),比較簡(jiǎn)單。在此不再贅述。
第 3 步:讓我們點(diǎn)擊發(fā)布設置。
按選擇,然后選擇綁定。
這時(shí)候會(huì )報錯。由于PBOOCMS不是系統已知的CMS,所以需要添加:@pboot
下面的插件會(huì )顯示我們自己創(chuàng )建安裝的插件。選擇您使用的那個(gè)。如果我選擇從云平臺下載的pboot示例。
根據需要填寫(xiě)相關(guān)選項。
這時(shí)我們會(huì )發(fā)現,在分類(lèi)欄目中,我們只能看到三個(gè)欄目:新聞中心、公司新聞、行業(yè)新聞。
這也是我們今天要講的重點(diǎn)。
正如我們剛才所說(shuō),這是要記住的事情。這實(shí)際上是發(fā)布時(shí)調用的 PHP 文件。具體路徑為: 在你的優(yōu)采云
采集
網(wǎng)站的根目錄下,找到這個(gè)文件夾:
\\plugin\\release\\cms
可以看到,有兩個(gè)與剛才APP名稱(chēng)同名的PHP文件。你使用哪個(gè)插件對應修改哪個(gè)PHP文件。
我用的是官方的PbootDemoSkycaiji,我們打開(kāi)這個(gè)PHP文件。
在醉酒的底部我們看到
public?function?param_option_category(){
<p>
$catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}</p>
它指定了一個(gè)news.html,如果你改成:case.html,你會(huì )在優(yōu)采云
的后臺看到publication classification變成了一個(gè)case欄。因此,如果我們要顯示所有的列,我們可以這樣修改。
public?function?param_option_category(){
$catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}
然后回到發(fā)布后臺,就可以看到了。列出所有列。然后正常采集
和釋放。 查看全部
解決方案:CN113726526A_人臉數據采集、驗證的方法、設備及系統在審
人臉數據采集、驗證的方法、設備及系統
技術(shù)領(lǐng)域
本申請涉及信息技術(shù)領(lǐng)域,尤其涉及一種人臉數據采集、驗證的方法、設備及系統。
背景技術(shù)
隨著(zhù)信息技術(shù)的發(fā)展,越來(lái)越多的場(chǎng)景中會(huì )使用到人臉識別技術(shù)。在使用人臉識別技術(shù)時(shí),首先需要采集人臉數據,然后將采集到的人臉數據發(fā)送給處理設備中進(jìn)行人臉識別。該上述過(guò)程中存在著(zhù)人臉數據重放攻擊風(fēng)險,即攻擊者使用此前交易中截獲的人臉數據,或者在其他渠道獲取的用戶(hù)人臉數據,在人臉識別的通訊報文中進(jìn)行替換,從而偽冒用戶(hù)達到欺騙識別設備的目的。目前的解決方案一般是通過(guò)對報文完整性的保護來(lái)進(jìn)行防范,如使用報文簽名或者計算報文MAC(Media Access Control,介質(zhì)訪(fǎng)問(wèn)控制)地址的方式,但是此種并不能從采集源頭上防止重放攻擊,仍然存在一定的安全風(fēng)險。
發(fā)明內容
本申請的一個(gè)目的是提供一種人臉數據采集、驗證的方案,用以解決現有方案中無(wú)法從采集源頭上防止了重放攻擊的問(wèn)題。
本申請實(shí)施例提供了一種人臉數據采集方法,所述方法包括:
采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
本申請實(shí)施例還提供了一種人臉數據驗證方法,所述方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
所述人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
采集設備獲取所述隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集的采集設備,所述采集設備包括:
數據接收裝置,用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;
視頻采集模塊,用于采集人臉樣本;
人臉輸出模塊,用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,其中,所述人臉識別服務(wù)器包括:
數據收發(fā)模塊,用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
數據處理模塊,用于生成所述隨機數,對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證,在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,該系統包括:
采集設備,用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
人臉識別服務(wù)器,用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種計算設備,該設備包括用于存儲計算機程序指令的存儲器和用于執行計算機程序指令的處理器,其中,當該計算機程序指令被該處理器執行時(shí),觸發(fā)所述設備執行所述的方法。
此外,本申請實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現所述的方法。
本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會(huì )變得更明顯:
圖1為本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程圖;
圖2為本申請實(shí)施例中可信人臉數據的一種數據構成示意圖;
圖3為本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程圖;
圖4為采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程圖;
圖5為本申請實(shí)施例提供的一種人臉數據采集和驗證的方法的處理流程圖;
圖6為本申請實(shí)施例提供的另一種人臉數據采集和驗證的方法的處理流程圖;

圖7為本申請實(shí)施例提供的一種計算設備的結構示意圖;
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實(shí)施方式
下面結合附圖對本申請作進(jìn)一步詳細描述。
在本申請一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò )的設備均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò )接口和內存。
內存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性?xún)却娴刃问?,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體,可以由任何方法或技術(shù)來(lái)實(shí)現信息存儲。信息可以是計算機可讀指令、數據結構、程序的裝置或其他數據。計算機的存儲介質(zhì)的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動(dòng)態(tài)隨機存取存儲器(DRAM)、其他類(lèi)型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術(shù)、只讀光盤(pán)(CD-ROM)、數字多功能光盤(pán)(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤(pán)存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪(fǎng)問(wèn)的信息。
本申請實(shí)施例提供了一種人臉數據采集及驗證方法,由采集設備實(shí)現人臉數據的采集,并由人臉識別服務(wù)器實(shí)現人臉數據的驗證,該方案在采集設備上就對人臉樣本添加了用于校驗的內容,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
在實(shí)際場(chǎng)景中,所述采集設備可以是具有視頻采集及信息處理功能的電子設備,例如收錄
攝像頭以及數據處理芯片的設備。其中,所述攝像頭可以是能夠采集彩色圖像的普通攝像頭,或者也可以是能夠采集深度信息、紅外信息等額外信息的攝像頭。所述人臉識別服務(wù)器在實(shí)現時(shí)可以包括但不限于單個(gè)網(wǎng)絡(luò )服務(wù)器、多個(gè)網(wǎng)絡(luò )服務(wù)器集或基于云計算的計算機集合等實(shí)現,可以用于實(shí)現設置鬧鐘時(shí)的部分處理功能。在此,云由基于云計算(Cloud Computing)的大量主機或網(wǎng)絡(luò )服務(wù)器構成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個(gè)虛擬計算機。
圖1示出了本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程,包括以下處理步驟:
步驟S101,采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本。所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
步驟S102,采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。其中,所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
步驟S103,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
圖3示出了本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程,包括以下處理步驟:
步驟S301,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
步驟S302,人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得。
步驟S303,人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證。其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
步驟S304,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
步驟S305,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數進(jìn)行驗證,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。由此,人臉識別服務(wù)器在生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備時(shí),可以接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,而后根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
圖4示出了采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程,具體流程包括準備階段和使用階段。其中,準備階段的流程如下:
P1)為采集設備配置設備ID(即設備標識)和設備可信密鑰對,其中設備ID是與每臺采集設備一一對應的,設備可信密鑰對可以是每臺采集設備一套,也可以是一批次采集設備共享一套。在使用階段之前,將設備ID和其對應的設備可信密鑰對中的設備公鑰上傳到可信管理服務(wù)器上。
P2)采集設備在出廠(chǎng)時(shí),在每一臺采集設備寫(xiě)入其對應的設備ID,用來(lái)唯一標識該采集設備;另外,需要在采集設備中寫(xiě)入設備可信密鑰對的設備私鑰以及對應的設備公鑰證書(shū)。
P3)人臉識別服務(wù)器從可信管理服務(wù)器獲取到其用以簽發(fā)設備公鑰證書(shū)的私鑰所對應的公鑰。
使用階段的流程如下:
S1)用戶(hù)在本地業(yè)務(wù)終端上發(fā)起業(yè)務(wù)請求,例如實(shí)際場(chǎng)景中可以是人臉認證、人臉識別等與需要基于人臉數據實(shí)現的業(yè)務(wù)請求,本地業(yè)務(wù)終端從人臉識別服務(wù)器請求一個(gè)隨機數;
S2)本地業(yè)務(wù)終端調用采集設備對用戶(hù)進(jìn)行人臉采集,并將隨機數發(fā)送給采集設備;
S3)采集設備對用戶(hù)人臉的原創(chuàng )
樣本進(jìn)行采集后,經(jīng)過(guò)質(zhì)量判斷和活體檢測后,作為人臉樣本與設備標識、傳入的隨機數等信息一起使用設備私鑰進(jìn)行簽名,獲得人臉數據簽名,然后與收錄
設備公鑰的數字證書(shū)一起形成可信人臉數據后,返回給本地業(yè)務(wù)終端。
S4)本地業(yè)務(wù)終端將獲得的可信人臉數據塊送至人臉識別服務(wù)器進(jìn)行處理。
S5)人臉識別服務(wù)器對可信人臉數據進(jìn)行驗證,具體方法為:先使用可信管理服務(wù)器公鑰驗證可信人臉數據中附帶的數字證書(shū)的合法性。如果驗證通過(guò),則使用該數字證書(shū)中的設備公鑰,驗證可信人臉數據中的人臉數據簽名的合法性。如果驗證通過(guò),則驗證可信人臉數據中的隨機數與人臉識別服務(wù)器生成并保存的隨機數是否一致。如果一致,則認為驗證通過(guò),可以使用該可信人臉數據中的人臉樣本進(jìn)行后續業(yè)務(wù)處理,例如進(jìn)行人臉注冊或者人臉識別等;
S6)人臉識別服務(wù)器返回處理結果給本地業(yè)務(wù)終端,例如人臉注冊或者人臉識別的結果是否成功。
基于前述人臉數據的采集方案和驗證方案,本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法所涉及的人臉識別服務(wù)器和采集設備的交互過(guò)程如下圖5所示,包括如下步驟:
步驟S501,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
步驟S502,采集設備獲取所述隨機數,并采集人臉樣本;
步驟S503,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S504,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S505,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據;

步驟S506,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S507,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S508,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的一些實(shí)施例中,實(shí)現人臉數據采集和驗證的方法時(shí),還可以包括本地業(yè)務(wù)終端,所述本地業(yè)務(wù)終端與人臉識別服務(wù)器、采集設備之間的交互過(guò)程如下圖6所示,包括如下步驟:
步驟S601,本地業(yè)務(wù)終端獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令;
步驟S602,本地業(yè)務(wù)終端向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;
步驟S603,人臉識別服務(wù)器根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數;
步驟S604,人臉識別服務(wù)器向所述本地業(yè)務(wù)終端返回所述隨機數;
步驟S605,本地業(yè)務(wù)終端向所述采集設備發(fā)送采集調用指令和所述隨機數;
步驟S606,采集設備獲取所述隨機數,并根據采集調用指令采集人臉樣本;
步驟S607,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S608,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S609,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。采集設備在生成可信人臉數據之后,可以先將其發(fā)送給本地業(yè)務(wù)終端,再由本地業(yè)務(wù)終端將可信人臉數據發(fā)送至人臉識別服務(wù)器。
步驟S610,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S611,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S612,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
基于同一發(fā)明構思,本申請實(shí)施例中還提供了用于人臉數據采集的采集設備、用于人臉數據驗證的人臉識別服務(wù)器以及用于實(shí)現人臉數據采集和驗證的系統,所述采集設備、人臉識別服務(wù)器和系統對應的方法是前述實(shí)施例中相應方法,并且其解決問(wèn)題的原理與該方法相似。
本申請實(shí)施例提供的一種用于人臉數據采集的采集設備的結構可以至少包括數據接收裝置、視頻采集模塊和人臉輸出模塊。其中,所述數據接收裝置用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;所述視頻采集模塊用于采集人臉樣本;所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
由此,本申請的一些實(shí)施例中,所述視頻采集模塊可以包括采集單元和檢測評估單元,所述采集單元用于采集人臉的原創(chuàng )
樣本,而所述檢測評估單元用于對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在獲得待簽名數據和人臉數據簽名之后,人臉輸出模塊可以根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。由此,本申請的一些實(shí)施例中,所述采集設備還可以包括數據接收模塊,該數據接收模塊用于在獲取人臉的原創(chuàng )
樣本之前,獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,該人臉識別服務(wù)器可以包括數據收發(fā)模塊和數據處理模塊。其中,數據收發(fā)模塊用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得人臉數據簽名。
所述數據處理模塊用于生成所述隨機數,以及根據可信人臉數據進(jìn)行各種驗證,包括用于對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證、使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證以及對校驗數據進(jìn)行校驗數據驗證。
其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器的數據處理模塊使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器的數據處理模塊對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,所述數據收發(fā)模塊還用于接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,并向所述本地業(yè)務(wù)終端返回隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備;所述數據處理模塊還用于根據所述隨機數獲取請求生成隨機數。即用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。
此外,本申請的一些實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,系統至少包括采集設備和人臉識別服務(wù)器。
采集設備用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
人臉識別服務(wù)器則用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請的另一實(shí)施例中,所述該系統還可以包括本地業(yè)務(wù)終端。所述本地業(yè)務(wù)終端用于獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令,并向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;以及向所述采集設備發(fā)送采集調用指令和所述隨機數。
所述采集裝置在采集人臉樣本時(shí),可以根據所述采集調用指令采集人臉樣本;而所述人臉識別服務(wù)器在提供隨機數時(shí),可以根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
綜上所述,本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
另外,本申請的一部分可被應用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執行時(shí),通過(guò)該計算機的操作,可以調用或提供根據本申請的方法和/或技術(shù)方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一些實(shí)施例包括一個(gè)如圖7所示的計算設備,該設備包括存儲有計算機可讀指令的一個(gè)或多個(gè)存儲器710和用于執行計算機可讀指令的處理器720,其中,當該計算機可讀指令被該處理器執行時(shí),使得所述設備執行基于前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
此外,本申請的一些實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專(zhuān)用集成電路(ASIC)、通用目的計算機或任何其他類(lèi)似硬件設備來(lái)實(shí)現。在一些實(shí)施例中,本申請的軟件程序可以通過(guò)處理器執行以實(shí)現上文步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數據結構)可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅動(dòng)器或軟磁盤(pán)及類(lèi)似設備。另外,本申請的一些步驟或功能可采用硬件來(lái)實(shí)現,例如,作為與處理器配合從而執行各個(gè)步驟或功能的電路。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細節,而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現本申請。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權利要求而不是上述說(shuō)明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數不排除復數。裝置權利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現。第一,第二等詞語(yǔ)用來(lái)表示名稱(chēng),而并不表示任何特定的順序。
整套解決方案:優(yōu)采云
采集器之PBOOTCMS入庫
網(wǎng)上已經(jīng)有優(yōu)采云
采集
器的使用方法。
我正在使用從云端下載的 優(yōu)采云
PBOOTCMS 規則。但是在使用的時(shí)候發(fā)現在存儲選擇中只能存儲新聞中心、新聞動(dòng)態(tài)和公司動(dòng)態(tài)三個(gè)類(lèi)別。
今天我們就來(lái)說(shuō)說(shuō)如何修改存儲列。順帶從頭到尾說(shuō)說(shuō)優(yōu)采云
的使用方法。
大哥step:下載插件。
首先我們在后臺云平臺上搜索PBOOT找到這個(gè)插件,然后下載。
看一下,這里可以看到一個(gè)APP的logo:PbootDemoSkycaiji
這個(gè)方法就是下載官方插件的方法?;蛘?,您可以自己發(fā)布一個(gè)插件。
自己發(fā)布還是官方下載都無(wú)所謂。如果不是很熟悉,直接使用官方插件即可。
第 2 步:讓我們創(chuàng )建一個(gè)新任務(wù)。
你可以隨意填寫(xiě)。
然后點(diǎn)擊:采集器設置
根據需要填寫(xiě)這些內容。
然后設置其他三個(gè),比較簡(jiǎn)單。在此不再贅述。

第 3 步:讓我們點(diǎn)擊發(fā)布設置。
按選擇,然后選擇綁定。
這時(shí)候會(huì )報錯。由于PBOOCMS不是系統已知的CMS,所以需要添加:@pboot
下面的插件會(huì )顯示我們自己創(chuàng )建安裝的插件。選擇您使用的那個(gè)。如果我選擇從云平臺下載的pboot示例。
根據需要填寫(xiě)相關(guān)選項。
這時(shí)我們會(huì )發(fā)現,在分類(lèi)欄目中,我們只能看到三個(gè)欄目:新聞中心、公司新聞、行業(yè)新聞。
這也是我們今天要講的重點(diǎn)。
正如我們剛才所說(shuō),這是要記住的事情。這實(shí)際上是發(fā)布時(shí)調用的 PHP 文件。具體路徑為: 在你的優(yōu)采云
采集
網(wǎng)站的根目錄下,找到這個(gè)文件夾:
\\plugin\\release\\cms
可以看到,有兩個(gè)與剛才APP名稱(chēng)同名的PHP文件。你使用哪個(gè)插件對應修改哪個(gè)PHP文件。
我用的是官方的PbootDemoSkycaiji,我們打開(kāi)這個(gè)PHP文件。
在醉酒的底部我們看到
public?function?param_option_category(){
<p>

$catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}</p>
它指定了一個(gè)news.html,如果你改成:case.html,你會(huì )在優(yōu)采云
的后臺看到publication classification變成了一個(gè)case欄。因此,如果我們要顯示所有的列,我們可以這樣修改。
public?function?param_option_category(){
$catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}
然后回到發(fā)布后臺,就可以看到了。列出所有列。然后正常采集
和釋放。
解決方案:Windows平臺實(shí)現Unity下窗體|攝像頭|屏幕采集并推送至RTMP服務(wù)器
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-11-19 07:31
技術(shù)背景
隨著(zhù)Unity3D的應用范圍越來(lái)越廣,越來(lái)越多的行業(yè)開(kāi)始基于Unity3D開(kāi)發(fā)產(chǎn)品,如傳統行業(yè)的虛擬仿真教育、航空工業(yè)、室內設計、城市規劃、工業(yè)仿真等領(lǐng)域。
基于此,許多開(kāi)發(fā)者苦于 Unity 環(huán)境中缺乏低延遲的推拉流解決方案。幾年前,我們在Unity環(huán)境下推出了一款跨平臺的低延遲RTMP|RTSP直播播放器,解決了很多問(wèn)題。延遲關(guān)鍵的使用場(chǎng)景。
隨著(zhù)時(shí)間的推移,越來(lái)越多的開(kāi)發(fā)者聯(lián)系我們,希望我們能夠在Unity環(huán)境下推出RTMP推送模塊,從Unity中獲取實(shí)時(shí)數據,實(shí)現延遲更低、效率更高的數據傳輸和推送?;诖?,我們發(fā)布了Unity環(huán)境下的RTMP推送模塊。
本文以Windows平臺為例。數據來(lái)源為Unity窗口、攝像頭或整屏、編碼傳輸模塊、或調用大牛直播SDK(官方)的原生接口。簡(jiǎn)單的界面是一個(gè)預覽:
技術(shù)實(shí)現 1. 基本初始化
private bool InitSDK()
{
if (!is_pusher_sdk_init_)
{
// 設置日志路徑(請確保目錄存在)
String log_path = "D:\\pulisherlog";
NTSmartLog.NT_SL_SetPath(log_path);
UInt32 isInited = NTSmartPublisherSDK.NT_PB_Init(0, IntPtr.Zero);
if (isInited != 0)
{
Debug.Log("調用NT_PB_Init失敗..");
return false;
}
is_pusher_sdk_init_ = true;
}
return true;
}
2.調用Open()接口獲取推送實(shí)例
public bool OpenPublisherHandle(uint video_option, uint audio_option)
{
if (publisher_handle_ != IntPtr.Zero)
{
return true;
}
publisher_handle_count_ = 0;
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_Open(out publisher_handle_,
video_option, audio_option, 0, IntPtr.Zero))
{
return false;
}
if (publisher_handle_ != IntPtr.Zero)
{
pb_event_call_back_ = new NT_PB_SDKEventCallBack(PbEventCallBack);
NTSmartPublisherSDK.NT_PB_SetEventCallBack(publisher_handle_, IntPtr.Zero, pb_event_call_back_);
return true;
}
else
{
return false;
}
}
3.初始化參數配置
這里需要注意的是,如果要采集unity窗口,需要設置圖層模式,先填充一層RGBA黑色背景,再添加一層用于疊加外部數據。
private void SetCommonOptionToPublisherSDK()
{
if (!IsPublisherHandleAvailable())
{
Debug.Log("SetCommonOptionToPublisherSDK, publisher handle with null..");
return;
}
NTSmartPublisherSDK.NT_PB_ClearLayersConfig(publisher_handle_, 0,
0, IntPtr.Zero);
if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_LAYER)
{
// 第0層填充RGBA矩形, 目的是保證幀率, 顏色就填充全黑
int red = 0;
int green = 0;
int blue = 0;
int alpha = 255;
NT_PB_RGBARectangleLayerConfig rgba_layer_c0 = new NT_PB_RGBARectangleLayerConfig();
rgba_layer_c0.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE;
rgba_layer_c0.base_.index_ = 0;
rgba_layer_c0.base_.enable_ = 1;
rgba_layer_c0.base_.region_.x_ = 0;
rgba_layer_c0.base_.region_.y_ = 0;
rgba_layer_c0.base_.region_.width_ = video_width_;
rgba_layer_c0.base_.region_.height_ = video_height_;
rgba_layer_c0.base_.offset_ = Marshal.OffsetOf(rgba_layer_c0.GetType(), "base_").ToInt32();
rgba_layer_c0.base_.cb_size_ = (uint)Marshal.SizeOf(rgba_layer_c0);
rgba_layer_c0.red_ = System.BitConverter.GetBytes(red)[0];
rgba_layer_c0.green_ = System.BitConverter.GetBytes(green)[0];
rgba_layer_c0.blue_ = System.BitConverter.GetBytes(blue)[0];
rgba_layer_c0.alpha_ = System.BitConverter.GetBytes(alpha)[0];
IntPtr rgba_conf = Marshal.AllocHGlobal(Marshal.SizeOf(rgba_layer_c0));
Marshal.StructureToPtr(rgba_layer_c0, rgba_conf, true);
UInt32 rgba_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
rgba_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE,
0, IntPtr.Zero);
Marshal.FreeHGlobal(rgba_conf);
NT_PB_ExternalVideoFrameLayerConfig external_layer_c1 = new NT_PB_ExternalVideoFrameLayerConfig();
external_layer_c1.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME;
external_layer_c1.base_.index_ = 1;
external_layer_c1.base_.enable_ = 1;
external_layer_c1.base_.region_.x_ = 0;
external_layer_c1.base_.region_.y_ = 0;
external_layer_c1.base_.region_.width_ = video_width_;
external_layer_c1.base_.region_.height_ = video_height_;
external_layer_c1.base_.offset_ = Marshal.OffsetOf(external_layer_c1.GetType(), "base_").ToInt32();
external_layer_c1.base_.cb_size_ = (uint)Marshal.SizeOf(external_layer_c1);
IntPtr external_layer_conf = Marshal.AllocHGlobal(Marshal.SizeOf(external_layer_c1));
Marshal.StructureToPtr(external_layer_c1, external_layer_conf, true);
UInt32 external_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
external_layer_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME,
0, IntPtr.Zero);
Marshal.FreeHGlobal(external_layer_conf);
}
<p>
else if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_CAMERA)
{
CameraInfo camera = cameras_[cur_sel_camera_index_];
NT_PB_VideoCaptureCapability cap = camera.capabilities_[cur_sel_camera_resolutions_index_];
SetVideoCaptureDeviceBaseParameter(camera.id_.ToString(), (UInt32)cap.width_, (UInt32)cap.height_);
}
SetFrameRate((UInt32)CalBitRate(edit_key_frame_, video_width_, video_height_));
Int32 type = 0; //軟編碼
Int32 encoder_id = 1;
UInt32 codec_id = (UInt32)NTCommonMediaDefine.NT_MEDIA_CODEC_ID.NT_MEDIA_CODEC_ID_H264;
Int32 param1 = 0;
SetVideoEncoder(type, encoder_id, codec_id, param1);
SetVideoQualityV2(CalVideoQuality(video_width_, video_height_, is_h264_encoder));
SetVideoMaxBitRate((CalMaxKBitRate(edit_key_frame_, video_width_, video_height_, false)));
SetVideoKeyFrameInterval((edit_key_frame_));
if (is_h264_encoder)
{
SetVideoEncoderProfile(1);
}
SetVideoEncoderSpeed(CalVideoEncoderSpeed(video_width_, video_height_, is_h264_encoder));
// 音頻相關(guān)設置
SetAuidoInputDeviceId(0);
SetPublisherAudioCodecType(1);
SetPublisherMute(is_mute);
SetEchoCancellation(0, 0);
SetNoiseSuppression(0);
SetAGC(0);
SetVAD(0);
SetInputAudioVolume(Convert.ToSingle(edit_audio_input_volume_));
}
</p>
4.數據采集
攝像頭和屏幕數據采集依然調用原生SDK接口,本文不再贅述。如果需要采集Unity形式的數據,可以參考如下代碼:
if ( texture_ == null || video_width_ != Screen.width || video_height_ != Screen.height)
{
Debug.Log("OnPostRender screen changed++ scr_width: " + Screen.width + " scr_height: " + Screen.height);
if (screen_image_ != IntPtr.Zero)
{
Marshal.FreeHGlobal(screen_image_);
screen_image_ = IntPtr.Zero;
}
if (texture_ != null)
{
UnityEngine.Object.Destroy(texture_);
texture_ = null;
}
video_width_ = Screen.width;
video_height_ = Screen.height;
texture_ = new Texture2D(video_width_, video_height_, TextureFormat.BGRA32, false);
screen_image_ = Marshal.AllocHGlobal(video_width_ * 4 * video_height_);
Debug.Log("OnPostRender screen changed--");
return;
}
texture_.ReadPixels(new Rect(0, 0, video_width_, video_height_), 0, 0, false);
texture_.Apply();
從紋理中,通過(guò)調用 GetRawTextureData() 獲取原創(chuàng )數據。
5、數據對接
獲取原創(chuàng )數據后,通過(guò)調用系統封裝的OnPostRGBAData()接口將數據傳遞給SDK層。
6.本地數據預覽
public bool StartPreview()
{
if(CheckPublisherHandleAvailable() == false)
return false;
video_preview_image_callback_ = new NT_PB_SDKVideoPreviewImageCallBack(SDKVideoPreviewImageCallBack);
NTSmartPublisherSDK.NT_PB_SetVideoPreviewImageCallBack(publisher_handle_, (int)NTSmartPublisherDefine.NT_PB_E_IMAGE_FORMAT.NT_PB_E_IMAGE_FORMAT_RGB32, IntPtr.Zero, video_preview_image_callback_);
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPreview(publisher_handle_, 0, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
return false;
}
publisher_handle_count_++;
is_previewing_ = true;
return true;
}
public void StopPreview()
{
if (is_previewing_ == false) return;
is_previewing_ = false;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPreview(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
設置好預覽后,處理預覽的數據回調
//預覽數據回調
public void SDKVideoPreviewImageCallBack(IntPtr handle, IntPtr user_data, IntPtr image)
{
NT_PB_Image pb_image = (NT_PB_Image)Marshal.PtrToStructure(image, typeof(NT_PB_Image));
NT_VideoFrame pVideoFrame = new NT_VideoFrame();
pVideoFrame.width_ = pb_image.width_;
pVideoFrame.height_ = pb_image.height_;
<p>
pVideoFrame.stride_ = pb_image.stride_[0];
Int32 argb_size = pb_image.stride_[0] * pb_image.height_;
pVideoFrame.plane_data_ = new byte[argb_size];
if (argb_size > 0)
{
Marshal.Copy(pb_image.plane_[0],pVideoFrame.plane_data_,0, argb_size);
}
{
cur_image_ = pVideoFrame;
}
}
</p>
7.相關(guān)事件回調處理
private void PbEventCallBack(IntPtr handle, IntPtr user_data,
UInt32 event_id,
Int64 param1,
Int64 param2,
UInt64 param3,
UInt64 param4,
[MarshalAs(UnmanagedType.LPStr)] String param5,
[MarshalAs(UnmanagedType.LPStr)] String param6,
IntPtr param7)
{
String event_log = "";
switch (event_id)
{
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTING:
event_log = "連接中";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTION_FAILED:
event_log = "連接失敗";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTED:
event_log = "已連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_DISCONNECTED:
event_log = "斷開(kāi)連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
default:
break;
}
if(OnLogEventMsg != null) OnLogEventMsg.Invoke(event_id, event_log);
}
8.開(kāi)始推送,停止推送
public bool StartPublisher(String url)
{
if (CheckPublisherHandleAvailable() == false) return false;
if (publisher_handle_ == IntPtr.Zero)
{
return false;
}
if (!String.IsNullOrEmpty(url))
{
NTSmartPublisherSDK.NT_PB_SetURL(publisher_handle_, url, IntPtr.Zero);
}
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPublisher(publisher_handle_, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
return false;
}
publisher_handle_count_++;
is_publishing_ = true;
return true;
}
public void StopPublisher()
{
if (is_publishing_ == false) return;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPublisher(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
}
9.關(guān)閉實(shí)例
public void Close()
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
總結
經(jīng)測試,在Unity環(huán)境下,通過(guò)高效數據采集,編碼推送,配合SmartPlayer播放,整體延遲可以控制在毫秒級,適合大部分Unity對延遲和穩定性的要求環(huán)境惡劣的場(chǎng)景。
解決方案:利用ROS采集VLP-16激光雷達數據
啟動(dòng)VLP-16激光雷達,想用ROS采集雷達數據,按照現有的教程總有一些小問(wèn)題,現在分享自己成功采集的數據,希望對那些剛進(jìn)坑的人有所幫助。
我使用 Ubuntu 16.04+ 動(dòng)力學(xué)系統
1. 安裝驅動(dòng)程序
sudo apt-get install ros-kinetic-velodyne
2. 配置網(wǎng)絡(luò )以連接到激光雷達(無(wú)需關(guān)閉無(wú)線(xiàn)):
修改 IPv4:在有線(xiàn)網(wǎng)絡(luò )中
更改為手動(dòng)
IP 地址為 192.168.1.77,
子網(wǎng)掩碼為 255.255.255.0,網(wǎng)關(guān)為 192.168.1.1。然后連接激光雷達,
打開(kāi)瀏覽器輸入192.168.1.201,查看激光雷達配置文件。
每次連接雷達時(shí),輸入以下兩個(gè)命令:
sudo ifconfig enp2s0 192.168.1.123
sudo 路由添加 192.168.1.201 enp2s0
3. 創(chuàng )建 ROS 項目:
MKDIR -P catkin_velodyne/SRC
光盤(pán)catkin_velodyne/SRC
git 克隆
光盤(pán)..
Rosdep install --from-path src --ignore-src --rosdistro kinetic -y
catkin_make
Source devel/setup.bash
4.將Velodyne XML文件轉換為ROS節點(diǎn)的YAML文件,VLP-16.xml據說(shuō)在免費的USB閃存盤(pán)中,反正沒(méi)找到
我從互聯(lián)網(wǎng)上下載了一個(gè)。請記住將下面的地址更改為您的 VLP-16 .xml文件的地址。
rosrun velodyne_pointcloud gen_calibration.py ~/VLP-16.xml (更改為你自己保存的目錄)。
5. 加載:
roslaunch velodyne_pointcloud VLP16_points.launch calibration:=~/VLP-16.yaml (更改為你自己保存的目錄)。
6、點(diǎn)云圖實(shí)時(shí)展示:
Rosrun Rviz Rviz -F velodyne
然后按主題添加
rviz 添加 PointCloud2,并在主題中輸入 /velodyne_points,這樣得到的 3D 點(diǎn)云圖就可以實(shí)時(shí)展示。
7. 記錄數據:
我看到的教程是用 rosbagrecord-oout/velodyne_points 命令獲取 /velodyne_points 主題的數據,但是當我去分析保存的數據時(shí),發(fā)現里面的雷達數據被處理了,反正我根本無(wú)法解讀。我想獲取雷達原創(chuàng )UDP報文中的信息來(lái)生成距離和強度圖像,所以我保存了/velodyne_packets這個(gè)主題的數據,保存的數據是收錄UDP的正文,每76個(gè)UDP數據包(每周掃描360度)都有一個(gè)時(shí)間戳,然后根據手冊就可以從數據中獲取距離和強度信息。
羅斯巴格記錄 -O 文件名 /velodyne_packets 查看全部
解決方案:Windows平臺實(shí)現Unity下窗體|攝像頭|屏幕采集并推送至RTMP服務(wù)器
技術(shù)背景
隨著(zhù)Unity3D的應用范圍越來(lái)越廣,越來(lái)越多的行業(yè)開(kāi)始基于Unity3D開(kāi)發(fā)產(chǎn)品,如傳統行業(yè)的虛擬仿真教育、航空工業(yè)、室內設計、城市規劃、工業(yè)仿真等領(lǐng)域。
基于此,許多開(kāi)發(fā)者苦于 Unity 環(huán)境中缺乏低延遲的推拉流解決方案。幾年前,我們在Unity環(huán)境下推出了一款跨平臺的低延遲RTMP|RTSP直播播放器,解決了很多問(wèn)題。延遲關(guān)鍵的使用場(chǎng)景。
隨著(zhù)時(shí)間的推移,越來(lái)越多的開(kāi)發(fā)者聯(lián)系我們,希望我們能夠在Unity環(huán)境下推出RTMP推送模塊,從Unity中獲取實(shí)時(shí)數據,實(shí)現延遲更低、效率更高的數據傳輸和推送?;诖?,我們發(fā)布了Unity環(huán)境下的RTMP推送模塊。
本文以Windows平臺為例。數據來(lái)源為Unity窗口、攝像頭或整屏、編碼傳輸模塊、或調用大牛直播SDK(官方)的原生接口。簡(jiǎn)單的界面是一個(gè)預覽:
技術(shù)實(shí)現 1. 基本初始化
private bool InitSDK()
{
if (!is_pusher_sdk_init_)
{
// 設置日志路徑(請確保目錄存在)
String log_path = "D:\\pulisherlog";
NTSmartLog.NT_SL_SetPath(log_path);
UInt32 isInited = NTSmartPublisherSDK.NT_PB_Init(0, IntPtr.Zero);
if (isInited != 0)
{
Debug.Log("調用NT_PB_Init失敗..");
return false;
}
is_pusher_sdk_init_ = true;
}
return true;
}
2.調用Open()接口獲取推送實(shí)例
public bool OpenPublisherHandle(uint video_option, uint audio_option)
{
if (publisher_handle_ != IntPtr.Zero)
{
return true;
}
publisher_handle_count_ = 0;
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_Open(out publisher_handle_,
video_option, audio_option, 0, IntPtr.Zero))
{
return false;
}
if (publisher_handle_ != IntPtr.Zero)
{
pb_event_call_back_ = new NT_PB_SDKEventCallBack(PbEventCallBack);
NTSmartPublisherSDK.NT_PB_SetEventCallBack(publisher_handle_, IntPtr.Zero, pb_event_call_back_);
return true;
}
else
{
return false;
}
}
3.初始化參數配置
這里需要注意的是,如果要采集unity窗口,需要設置圖層模式,先填充一層RGBA黑色背景,再添加一層用于疊加外部數據。
private void SetCommonOptionToPublisherSDK()
{
if (!IsPublisherHandleAvailable())
{
Debug.Log("SetCommonOptionToPublisherSDK, publisher handle with null..");
return;
}
NTSmartPublisherSDK.NT_PB_ClearLayersConfig(publisher_handle_, 0,
0, IntPtr.Zero);
if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_LAYER)
{
// 第0層填充RGBA矩形, 目的是保證幀率, 顏色就填充全黑
int red = 0;
int green = 0;
int blue = 0;
int alpha = 255;
NT_PB_RGBARectangleLayerConfig rgba_layer_c0 = new NT_PB_RGBARectangleLayerConfig();
rgba_layer_c0.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE;
rgba_layer_c0.base_.index_ = 0;
rgba_layer_c0.base_.enable_ = 1;
rgba_layer_c0.base_.region_.x_ = 0;
rgba_layer_c0.base_.region_.y_ = 0;
rgba_layer_c0.base_.region_.width_ = video_width_;
rgba_layer_c0.base_.region_.height_ = video_height_;
rgba_layer_c0.base_.offset_ = Marshal.OffsetOf(rgba_layer_c0.GetType(), "base_").ToInt32();
rgba_layer_c0.base_.cb_size_ = (uint)Marshal.SizeOf(rgba_layer_c0);
rgba_layer_c0.red_ = System.BitConverter.GetBytes(red)[0];
rgba_layer_c0.green_ = System.BitConverter.GetBytes(green)[0];
rgba_layer_c0.blue_ = System.BitConverter.GetBytes(blue)[0];
rgba_layer_c0.alpha_ = System.BitConverter.GetBytes(alpha)[0];
IntPtr rgba_conf = Marshal.AllocHGlobal(Marshal.SizeOf(rgba_layer_c0));
Marshal.StructureToPtr(rgba_layer_c0, rgba_conf, true);
UInt32 rgba_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
rgba_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE,
0, IntPtr.Zero);
Marshal.FreeHGlobal(rgba_conf);
NT_PB_ExternalVideoFrameLayerConfig external_layer_c1 = new NT_PB_ExternalVideoFrameLayerConfig();
external_layer_c1.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME;
external_layer_c1.base_.index_ = 1;
external_layer_c1.base_.enable_ = 1;
external_layer_c1.base_.region_.x_ = 0;
external_layer_c1.base_.region_.y_ = 0;
external_layer_c1.base_.region_.width_ = video_width_;
external_layer_c1.base_.region_.height_ = video_height_;
external_layer_c1.base_.offset_ = Marshal.OffsetOf(external_layer_c1.GetType(), "base_").ToInt32();
external_layer_c1.base_.cb_size_ = (uint)Marshal.SizeOf(external_layer_c1);
IntPtr external_layer_conf = Marshal.AllocHGlobal(Marshal.SizeOf(external_layer_c1));
Marshal.StructureToPtr(external_layer_c1, external_layer_conf, true);
UInt32 external_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
external_layer_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME,
0, IntPtr.Zero);
Marshal.FreeHGlobal(external_layer_conf);
}
<p>

else if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_CAMERA)
{
CameraInfo camera = cameras_[cur_sel_camera_index_];
NT_PB_VideoCaptureCapability cap = camera.capabilities_[cur_sel_camera_resolutions_index_];
SetVideoCaptureDeviceBaseParameter(camera.id_.ToString(), (UInt32)cap.width_, (UInt32)cap.height_);
}
SetFrameRate((UInt32)CalBitRate(edit_key_frame_, video_width_, video_height_));
Int32 type = 0; //軟編碼
Int32 encoder_id = 1;
UInt32 codec_id = (UInt32)NTCommonMediaDefine.NT_MEDIA_CODEC_ID.NT_MEDIA_CODEC_ID_H264;
Int32 param1 = 0;
SetVideoEncoder(type, encoder_id, codec_id, param1);
SetVideoQualityV2(CalVideoQuality(video_width_, video_height_, is_h264_encoder));
SetVideoMaxBitRate((CalMaxKBitRate(edit_key_frame_, video_width_, video_height_, false)));
SetVideoKeyFrameInterval((edit_key_frame_));
if (is_h264_encoder)
{
SetVideoEncoderProfile(1);
}
SetVideoEncoderSpeed(CalVideoEncoderSpeed(video_width_, video_height_, is_h264_encoder));
// 音頻相關(guān)設置
SetAuidoInputDeviceId(0);
SetPublisherAudioCodecType(1);
SetPublisherMute(is_mute);
SetEchoCancellation(0, 0);
SetNoiseSuppression(0);
SetAGC(0);
SetVAD(0);
SetInputAudioVolume(Convert.ToSingle(edit_audio_input_volume_));
}
</p>
4.數據采集
攝像頭和屏幕數據采集依然調用原生SDK接口,本文不再贅述。如果需要采集Unity形式的數據,可以參考如下代碼:
if ( texture_ == null || video_width_ != Screen.width || video_height_ != Screen.height)
{
Debug.Log("OnPostRender screen changed++ scr_width: " + Screen.width + " scr_height: " + Screen.height);
if (screen_image_ != IntPtr.Zero)
{
Marshal.FreeHGlobal(screen_image_);
screen_image_ = IntPtr.Zero;
}
if (texture_ != null)
{
UnityEngine.Object.Destroy(texture_);
texture_ = null;
}
video_width_ = Screen.width;
video_height_ = Screen.height;
texture_ = new Texture2D(video_width_, video_height_, TextureFormat.BGRA32, false);
screen_image_ = Marshal.AllocHGlobal(video_width_ * 4 * video_height_);
Debug.Log("OnPostRender screen changed--");
return;
}
texture_.ReadPixels(new Rect(0, 0, video_width_, video_height_), 0, 0, false);
texture_.Apply();
從紋理中,通過(guò)調用 GetRawTextureData() 獲取原創(chuàng )數據。
5、數據對接
獲取原創(chuàng )數據后,通過(guò)調用系統封裝的OnPostRGBAData()接口將數據傳遞給SDK層。
6.本地數據預覽
public bool StartPreview()
{
if(CheckPublisherHandleAvailable() == false)
return false;
video_preview_image_callback_ = new NT_PB_SDKVideoPreviewImageCallBack(SDKVideoPreviewImageCallBack);
NTSmartPublisherSDK.NT_PB_SetVideoPreviewImageCallBack(publisher_handle_, (int)NTSmartPublisherDefine.NT_PB_E_IMAGE_FORMAT.NT_PB_E_IMAGE_FORMAT_RGB32, IntPtr.Zero, video_preview_image_callback_);
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPreview(publisher_handle_, 0, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
return false;
}
publisher_handle_count_++;
is_previewing_ = true;
return true;
}
public void StopPreview()
{
if (is_previewing_ == false) return;
is_previewing_ = false;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPreview(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
設置好預覽后,處理預覽的數據回調
//預覽數據回調
public void SDKVideoPreviewImageCallBack(IntPtr handle, IntPtr user_data, IntPtr image)
{
NT_PB_Image pb_image = (NT_PB_Image)Marshal.PtrToStructure(image, typeof(NT_PB_Image));
NT_VideoFrame pVideoFrame = new NT_VideoFrame();
pVideoFrame.width_ = pb_image.width_;
pVideoFrame.height_ = pb_image.height_;
<p>

pVideoFrame.stride_ = pb_image.stride_[0];
Int32 argb_size = pb_image.stride_[0] * pb_image.height_;
pVideoFrame.plane_data_ = new byte[argb_size];
if (argb_size > 0)
{
Marshal.Copy(pb_image.plane_[0],pVideoFrame.plane_data_,0, argb_size);
}
{
cur_image_ = pVideoFrame;
}
}
</p>
7.相關(guān)事件回調處理
private void PbEventCallBack(IntPtr handle, IntPtr user_data,
UInt32 event_id,
Int64 param1,
Int64 param2,
UInt64 param3,
UInt64 param4,
[MarshalAs(UnmanagedType.LPStr)] String param5,
[MarshalAs(UnmanagedType.LPStr)] String param6,
IntPtr param7)
{
String event_log = "";
switch (event_id)
{
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTING:
event_log = "連接中";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTION_FAILED:
event_log = "連接失敗";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTED:
event_log = "已連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_DISCONNECTED:
event_log = "斷開(kāi)連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
default:
break;
}
if(OnLogEventMsg != null) OnLogEventMsg.Invoke(event_id, event_log);
}
8.開(kāi)始推送,停止推送
public bool StartPublisher(String url)
{
if (CheckPublisherHandleAvailable() == false) return false;
if (publisher_handle_ == IntPtr.Zero)
{
return false;
}
if (!String.IsNullOrEmpty(url))
{
NTSmartPublisherSDK.NT_PB_SetURL(publisher_handle_, url, IntPtr.Zero);
}
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPublisher(publisher_handle_, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
return false;
}
publisher_handle_count_++;
is_publishing_ = true;
return true;
}
public void StopPublisher()
{
if (is_publishing_ == false) return;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPublisher(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
}
9.關(guān)閉實(shí)例
public void Close()
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
總結
經(jīng)測試,在Unity環(huán)境下,通過(guò)高效數據采集,編碼推送,配合SmartPlayer播放,整體延遲可以控制在毫秒級,適合大部分Unity對延遲和穩定性的要求環(huán)境惡劣的場(chǎng)景。
解決方案:利用ROS采集VLP-16激光雷達數據
啟動(dòng)VLP-16激光雷達,想用ROS采集雷達數據,按照現有的教程總有一些小問(wèn)題,現在分享自己成功采集的數據,希望對那些剛進(jìn)坑的人有所幫助。
我使用 Ubuntu 16.04+ 動(dòng)力學(xué)系統
1. 安裝驅動(dòng)程序
sudo apt-get install ros-kinetic-velodyne
2. 配置網(wǎng)絡(luò )以連接到激光雷達(無(wú)需關(guān)閉無(wú)線(xiàn)):
修改 IPv4:在有線(xiàn)網(wǎng)絡(luò )中
更改為手動(dòng)
IP 地址為 192.168.1.77,
子網(wǎng)掩碼為 255.255.255.0,網(wǎng)關(guān)為 192.168.1.1。然后連接激光雷達,
打開(kāi)瀏覽器輸入192.168.1.201,查看激光雷達配置文件。
每次連接雷達時(shí),輸入以下兩個(gè)命令:

sudo ifconfig enp2s0 192.168.1.123
sudo 路由添加 192.168.1.201 enp2s0
3. 創(chuàng )建 ROS 項目:
MKDIR -P catkin_velodyne/SRC
光盤(pán)catkin_velodyne/SRC
git 克隆
光盤(pán)..
Rosdep install --from-path src --ignore-src --rosdistro kinetic -y
catkin_make
Source devel/setup.bash
4.將Velodyne XML文件轉換為ROS節點(diǎn)的YAML文件,VLP-16.xml據說(shuō)在免費的USB閃存盤(pán)中,反正沒(méi)找到

我從互聯(lián)網(wǎng)上下載了一個(gè)。請記住將下面的地址更改為您的 VLP-16 .xml文件的地址。
rosrun velodyne_pointcloud gen_calibration.py ~/VLP-16.xml (更改為你自己保存的目錄)。
5. 加載:
roslaunch velodyne_pointcloud VLP16_points.launch calibration:=~/VLP-16.yaml (更改為你自己保存的目錄)。
6、點(diǎn)云圖實(shí)時(shí)展示:
Rosrun Rviz Rviz -F velodyne
然后按主題添加
rviz 添加 PointCloud2,并在主題中輸入 /velodyne_points,這樣得到的 3D 點(diǎn)云圖就可以實(shí)時(shí)展示。
7. 記錄數據:
我看到的教程是用 rosbagrecord-oout/velodyne_points 命令獲取 /velodyne_points 主題的數據,但是當我去分析保存的數據時(shí),發(fā)現里面的雷達數據被處理了,反正我根本無(wú)法解讀。我想獲取雷達原創(chuàng )UDP報文中的信息來(lái)生成距離和強度圖像,所以我保存了/velodyne_packets這個(gè)主題的數據,保存的數據是收錄UDP的正文,每76個(gè)UDP數據包(每周掃描360度)都有一個(gè)時(shí)間戳,然后根據手冊就可以從數據中獲取距離和強度信息。
羅斯巴格記錄 -O 文件名 /velodyne_packets
最新版:jquery基礎快速教程和“jquery之本”框架教程(免費版)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2022-11-18 10:28
文章采集調用ie,然后經(jīng)過(guò)前端轉換輸出html加js讓用戶(hù)點(diǎn)擊頁(yè)面,點(diǎn)擊后執行相應的動(dòng)作,js代碼通過(guò)后端返回頁(yè)面并獲取交互數據,進(jìn)行展示,整個(gè)過(guò)程不涉及到網(wǎng)頁(yè)的加載,即flash,難度稍微低些,另外,在實(shí)現這個(gè)前端功能的時(shí)候,可以用jquery框架,總的來(lái)說(shuō)還是要具備一定的前端功底以及網(wǎng)絡(luò )編程的基礎,如果是小白也沒(méi)有關(guān)系,現在也有免費開(kāi)源的jquery框架,直接通過(guò)mvc的模式進(jìn)行開(kāi)發(fā)。
開(kāi)發(fā)效率還是挺高的,最新版本的一些工具提供了大量的mvc模式開(kāi)發(fā)示例視頻教程,供大家學(xué)習交流。首頁(yè):jquery基礎快速教程和“jquery之本”框架教程(免費版)“jquery之本”框架教程(付費版)下載:鏈接密碼:n50b具體參見(jiàn):jquery教程_jquery框架教程精講_android開(kāi)發(fā)_視頻教程_免費教程大全當然在學(xué)習過(guò)程中,有不懂的問(wèn)題可以關(guān)注我的公眾號回復:jquery,獲取相應的教程視頻以及后端js開(kāi)發(fā)教程!。
寫(xiě)幾個(gè)頁(yè)面,就熟練了,
已經(jīng)給jquery提交了,他們回答的還挺詳細的。 查看全部
最新版:jquery基礎快速教程和“jquery之本”框架教程(免費版)
文章采集調用ie,然后經(jīng)過(guò)前端轉換輸出html加js讓用戶(hù)點(diǎn)擊頁(yè)面,點(diǎn)擊后執行相應的動(dòng)作,js代碼通過(guò)后端返回頁(yè)面并獲取交互數據,進(jìn)行展示,整個(gè)過(guò)程不涉及到網(wǎng)頁(yè)的加載,即flash,難度稍微低些,另外,在實(shí)現這個(gè)前端功能的時(shí)候,可以用jquery框架,總的來(lái)說(shuō)還是要具備一定的前端功底以及網(wǎng)絡(luò )編程的基礎,如果是小白也沒(méi)有關(guān)系,現在也有免費開(kāi)源的jquery框架,直接通過(guò)mvc的模式進(jìn)行開(kāi)發(fā)。

開(kāi)發(fā)效率還是挺高的,最新版本的一些工具提供了大量的mvc模式開(kāi)發(fā)示例視頻教程,供大家學(xué)習交流。首頁(yè):jquery基礎快速教程和“jquery之本”框架教程(免費版)“jquery之本”框架教程(付費版)下載:鏈接密碼:n50b具體參見(jiàn):jquery教程_jquery框架教程精講_android開(kāi)發(fā)_視頻教程_免費教程大全當然在學(xué)習過(guò)程中,有不懂的問(wèn)題可以關(guān)注我的公眾號回復:jquery,獲取相應的教程視頻以及后端js開(kāi)發(fā)教程!。

寫(xiě)幾個(gè)頁(yè)面,就熟練了,
已經(jīng)給jquery提交了,他們回答的還挺詳細的。
教程:dedecms織夢(mèng)TAG標簽調用代碼
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-11-17 02:51
標簽標簽
是一種自己定義的關(guān)鍵詞,比分類(lèi)更準確、更具體,可以概括文章主要內容,合理使用TAG標簽,可以讓你發(fā)表的文章更容易檢索。
很多網(wǎng)站首頁(yè)、列表頁(yè)和文章頁(yè)都用超鏈接調用TAG關(guān)鍵詞,有利于蜘蛛搜索和抓取,也有利于用戶(hù)點(diǎn)擊,那么如何在織夢(mèng)dedecms系統的網(wǎng)站上實(shí)現此功能呢?對此,做網(wǎng)站吧,整理出以下方法供大家使用:
1、TaT ?B 6g 標簽 o V % 的語(yǔ)法解釋
基本語(yǔ)法:
{dede:tag row='30' sort='new' getall='0′}
c B 8 r///a/dedejq/[field:link/]'>[field:tag /]
{/dede:tag}
參數說(shuō)明:
row=K z 9 W k \ B * x '30' 呼叫號碼為 30
sort='new' 排序 月, 蘭特, 周
getall='0' 獲取當前內容頁(yè)面 TAG 標記的類(lèi)型 0,以及獲取所有 TAG 標記的類(lèi)型 1。
基礎模板字段:鏈接、標記
2. 最新的標簽標簽稱(chēng)為
{dede:tag row='30' sort='new'}[字段:突出顯示/]
?。╗字段:結果/])
{/dede:tag}
3.調用本月熱門(mén)標簽標簽
{dede:tag row='30' sort='month'}I d s d stp:///a/dedejq/[field:link/]'>[field:
tagname/]([field:result/])
{/dede:tag}
4. 隨機標簽調用
{deu } ^de:tag row='60' sort='rand'}
$ J | m W 5 F /a/dedejq/[field:link/]'>[field:highlight/]([field:result/])
{/dede:tag}
5. 采集熱 [# W 0 V N L n – 門(mén)標簽,轉換后刷新
模板代碼:
{dede:tag row='10' sort='month' }
, E y u mom/a/dedejq/[field:link/]'>[field:tagname/] &o : T # hlt;/a>
{/dede:tag}
^ e 8 {t language=“JavaScript”>
偏移量){
tag_a.className=“tag”+(rnd-offsc y 2 4et);
}
}
}/
/–>
CSS代碼:
.tag1 { color:h Z j j m G i + X#339900; font-weight:bold; }
.tag2 { color:#e65730; }
.tag3 { color:#00b9da; }
.tag4 { color:#FG 2 4 C +E3981; 7 5 ) T [ Jfont-weighW Z P 7 } G &t:bold; font-size:14px; }
6. 在頁(yè)面文章調用標簽標簽
{J w % = S y p 8 gdede:tag table='dede_search_keywords' sort='keyword' row='2′ ifd O b y F=“}
\ L \dedejq/[field:link/]' target=_i 7 * # _blank>[field:tag /]
{/dede:tag}
或
{dede:fie# n : 2 [ r XLD name='Keywords' runphp='yes' }
if(!empty(@me)){
$kws = 爆炸(' ',@me);
@me = “”;
foreach($kws as $k){
@me .= “O / x 4 # '/tag.php?/$k/'>$k ”;
}
@me= str_repla' $ F 0 }ce('+', ' ',trim(@me));
}
{/dede:field}
7. 列表頁(yè)調用 TAG 標簽的兩個(gè) b # k F w D 方法
dedecms列表中的默認值無(wú)法調用 tag\q v C; _ X 標簽。Do 網(wǎng)站 G * { r p i, 7 n 為您提供以下不同版本的標簽標簽調用 T D G A p A are you 方法:
?。?)、de, w \decms 5.7 調用方法
首先,找到 include\helpers\archive.helper.php 文件(注:有些朋友會(huì )有疑問(wèn),首頁(yè)和頻道,列表應該添加不同的調用,但我開(kāi)始用列表頁(yè)面測試,成功;添加 m \ b v q r 首頁(yè)后,測試也進(jìn)入了 D Y G R U Y T + D 功能顯示,所以我沒(méi)有繼續深入研究,另外,這個(gè)文件的內容發(fā)生了變化,在后臺文件是無(wú)法更改的,提示 _&0 7 是注入 sql,所以要在 ftp 中找到這個(gè)文件來(lái)更改 0。)
在底部添加:
函數; f G GetTags_list($aid)
{
全球$dsql;
$tags = “;
$query = “從'ma_taglisi v \ at'中選擇標簽,其中aid='$aid'”;
~ w T $dsql->Execute('tag',$query);
0 I 5 + 2 y a s whil' j % s ~ we($row = $dsql->GetArray('tag'))
{
$tags .= ($tags==“ ?“9 R.Q e #<^ ) \ n 6;a hreb E H f Q uf='“.urlencode($row['tag']).”' &gl f _t;Y ] R 5 L t # = G“.$row['tag'].”“ : ','.”O % V x b ^ .i P /tags.php?/“.urlencode($row['tag']).”' >“.$row['tag'].”“);
}
返回 $tau P % @ rgs;
}
那么Q I S + v b H k,加上:,這里列表需要調用標簽標簽
[字段:id 函數=GetTags_list(@me)/]
以完成。
?。?)、dedecms 5K T y W + C g j.6 版本 G \ G Y # |G本的調用方法
方法一:
只需在模板需要的地方添加以下代碼:
[字段:ID runphp=yes]
$tsql = new DedeSql(false);
$tags = “B F e –;
$tsql->SetQuery(“選擇 i.tag 從 dede_taglist t 左連接 dede_tagindex i on i.id=t.tid 其中 t.an / ;E Zid='@me'“);
$tsql-e ) ;>ExG V q @ecute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “”.$row['tag'].“ &k u blt;/a>”;
}
@me=$tags;
[/字段:id]
注意:此步驟無(wú)法在 dede 5.7 中實(shí)現。
方法2:
打開(kāi) dedecms根目錄 T k Y ~include/common.func.php,在底部的 “!k ?A b O?>“在以下代碼之前:
讓我們做網(wǎng)站:列表頁(yè)調用標簽的方法
函數列表標簽($aid)
{
$tsql = new DedeSql(false);
$tags = “;{ ( n : u X ' , m
$tsql->SetQuery(“Select i.tag FrM .o 9 Oom dt 7 ;2 j ] ^ede_taglist t left join dede_tagindex i on i.id=t.tid where t.aid='$aid'“);
$tsql->執行('t');
whi– x W s e – ale($row = $tsql->GetArray('t',MYSQL_ASSOC)){7 C \ j
$tags .= “D ( & 6lencode($row['tag']).” /'>“.$rowj 0 Y ? x v z o J['tag'].”";
}% W ?z F |_ = i
雷圖]U Y骨灰盒$tags;
}
{@ ? n i 2 0 , 5 4dede:field.id runphp=yes}
$tsql = new DedeSql(false);
$tags = “;
$tsql->SetQuery(“Select i.tag From ded\ } q |e_taglist t left join dede_tak f 4gindex i on i.id=t.tid where t.aid='@me'”);
$' 1 ~tsql->Execute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “e D Hhp?/”.urlencode($row['tag']).“' >”.$row['tag'].“”;
}
@me=$# A F ytags;
{/dede:field.id}
添加代碼 6 j't*$x 后,可以使用列表頁(yè):
{m s s C $dede:field.id function=“l(fā)isttag(@me)”/}
以調用標簽標簽。
方法三:
inc_functions.php 添加 :
函數列表標記($aid){
$tsql = new DedeSql(p ' w x 8 Q 3 s tfalse);
$tags = “;
$tsql->SetQuery(“Select i.tagname From xkzzz_tag_list t left join xkzzz_tu 4 t \ 0 { x gag_index i on i.id=t.tid where t.aid='$aid'”);
$tsql->執行('t');
while($row = $tsql->Getj [ x &Array('t'{ N f M K v S,MYSQL_AO r _ 0 |SSOC)){
$tags .= “s 1 j { ~ + !/tag.php?/”.urlencodeE # 6 [ z H 0 V Y($row['tagname']).“' >”.$rowu F G y A ,['tagname'].“”;
}
+ _ c j c 6 d 返回$tags;
}
然后添加 :,其中列表頁(yè)位于
[字段:ID 函數=“列表標記(@me)”/]
可以調出來(lái),但是這個(gè)方法也需要更改程序文件,看不懂代碼的朋友,慎用吧!
8. 首頁(yè)調用該方法文章 Tg j LAG 標簽
如果您網(wǎng)站使用 dedecms v5.7 可以使用以下標簽:
徑直
[field:id function=GetTags(@me)/]
可以調出,但不能調出g Y # k x s T O \沒(méi)有連接,為了添加標簽標簽的鏈接,還需要做到以下幾點(diǎn):
首先,注 4 + z { # 。E % 刪除 130 行收錄/幫助程序/存檔.helper.php 文件
$tags .= ($tags==“ ? $row['標簽'] : ','.$row['標簽']);
用以下?!C 語(yǔ)句替換,當然是 J { |R 您還可以添加自己的樣式:
$tags .= “_ % k a !php?/”.urlencode($row['tag']).“ /'>”.$row['tag'].”";
添加 # z ; ! p t ] o 下一代 { 0 H R i 代碼:
if ( ! function_exists(7 h * Y 0 r Q'GetTagk')){
函數 GetTagk($aid)
{@ / ! ; * K { i
全球$dsql;
$tagk = “;
$query = “選擇標簽,從'ma_taglist'中輔助,其中aid='$aid'”;
$dsql->Execute('tagD v ^ n b',$query);
while($row = $dsql->GetArray('tag'))
{
$tagk .= ($t\ Z * & \ } 3agk==“n 1 i ? $row['tag'] : ','.$row['tag']);
}
返回 $ta 2 V )O { mgk;
}
}
然后,打開(kāi) dede/a( h m^ Jrticle_edit.php 找到:
$tags = Gf I j DetTags($aid);
添加以下內容:
$t( H e ~ M T 8 | *agk = GetTagk($o Q D Jaid);
打開(kāi) dede/tempj x z t F n h mlets/article_edit.htm 再次調用標簽標簽
學(xué)習筆記:學(xué)python,怎么能不學(xué)習scrapy呢
本文分享自華為云社區《學(xué)python怎么能不學(xué)scrapy?本博客帶你學(xué)起來(lái)-云社區-華為云》,作者:橡皮擦。
在正式寫(xiě)爬蟲(chóng)案例之前,我們先系統地了解一下scrapy。
scrapy安裝和簡(jiǎn)單操作
使用命令pip install scrapy進(jìn)行安裝。安裝成功后,需要采集幾個(gè)網(wǎng)址,方便后續學(xué)習使用。
安裝完成后,直接在控制臺輸入scrapy,出現如下命令即表示安裝成功。
> scrapy
Scrapy 2.5.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
上圖是scrapy內置命令列表,標準格式的scrapy,可以通過(guò)scrapy -h查看指定命令的幫助手冊。
scrapy中有兩種命令,一種是全局的,一種是項目中的。后者需要進(jìn)入scrapy目錄才能運行。
這些命令一開(kāi)始不需要完全記住,隨時(shí)可以查看。還有幾個(gè)比較常用的,例如:
**scrpy 啟動(dòng)項目**
該命令首先根據項目名稱(chēng)創(chuàng )建一個(gè)文件夾,然后在該文件夾下創(chuàng )建一個(gè)scrpy項目。這一步是所有后續代碼的起點(diǎn)。
> scrapy startproject my_scrapy
> New Scrapy project 'my_scrapy', using template directory 'e:\pythonproject\venv\lib\site-packages\scrapy\templates\project', created in: # 一個(gè)新的 scrapy 項目被創(chuàng )建了,使用的模板是 XXX,創(chuàng )建的位置是 XXX
E:\pythonProject\滾雪球學(xué)Python第4輪\my_scrapy
You can start your first spider with: # 開(kāi)啟你的第一個(gè)爬蟲(chóng)程序
cd my_scrapy # 進(jìn)入文件夾
scrapy genspider example example.com # 使用項目命令創(chuàng )建爬蟲(chóng)文件
以上內容添加了一些評論,可以對照學(xué)習。默認生成的文件位于 python 運行時(shí)目錄中。如果要修改項目目錄,請使用如下格式化命令:
scrapy startproject myproject [project_dir]
例如
scrapy startproject myproject d:/d1
命令基于模板創(chuàng )建的項目結構如下,其中紅色下劃線(xiàn)為項目目錄,綠色下劃線(xiàn)為scrapy項目。如果要運行項目命令,首先要進(jìn)入項目目錄下紅色下劃線(xiàn)的my_scrapy文件夾??刂祈椖?。
下面生成爬蟲(chóng)文件
使用命令scrapy genspider [-t template]生成爬蟲(chóng)文件。該方法是快捷操作,也可以手動(dòng)創(chuàng )建。創(chuàng )建的爬蟲(chóng)文件會(huì )出現在當前目錄或項目文件夾下的spiders文件夾中,name為爬蟲(chóng)名稱(chēng),domain用于爬蟲(chóng)文件中allowed_domains和start_urls數據,[-t template]表示可以選擇生成文件模板。
要查看所有模板,請使用以下命令,默認模板是 basic。
> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed
創(chuàng )建第一個(gè)scrapy爬蟲(chóng)文件,測試命令如下:
>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm
這時(shí)在spiders文件夾中,出現了pm.py文件,文件內容如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['imspm.com']
start_urls = ['http://imspm.com/']
def parse(self, response):
pass
測試 scrapy 爬蟲(chóng)運行
使用命令scrapy crawl,spider是上面生成的爬蟲(chóng)文件名,如果出現如下內容,說(shuō)明爬蟲(chóng)加載正確。
>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]
scrapy的基本應用
scrapy 的工作流程非常簡(jiǎn)單:
采集首頁(yè)源碼;分析首頁(yè)源碼,獲取下一頁(yè)鏈接;請求下一頁(yè)的源代碼;解析源碼,獲取下一頁(yè)的源碼;[…] 過(guò)程中,提取到目標數據后,保存。
下面給大家展示一個(gè)scrapy的完整案例應用,作為爬蟲(chóng)120案例scrapy部分的第一個(gè)例子。
> scrapy startproject my_project 爬蟲(chóng)
> cd 爬蟲(chóng)
<p>
> scrapy genspider pm imspm.com</p>
得到項目結構如下:
對上圖中部分文件的簡(jiǎn)要說(shuō)明。
使用scrapy crawl pm運行爬蟲(chóng)后,所有的輸出和描述如下:
上面代碼的請求次數是7次,因為pm.py文件中默認沒(méi)有添加www。如果添加此內容,則請求數變?yōu)?4。
當前pm.py文件代碼如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['www.imspm.com']
start_urls = ['http://www.imspm.com/']
def parse(self, response):
print(response.text)
其中的parse是指請求start_urls中的地址,得到response后的回調函數,通過(guò)參數response的.text屬性直接輸出網(wǎng)頁(yè)源碼。
獲取到源碼后,需要對源碼進(jìn)行解析存儲
在存儲之前,需要手動(dòng)定義一個(gè)數據結構,在items.py文件中實(shí)現,修改代碼中的類(lèi)名,MyProjectItem → ArticleItem。
import scrapy
class ArticleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() # 文章標題
url = scrapy.Field() # 文章地址
author = scrapy.Field() # 作者
修改pm.py文件中的parse函數,增加網(wǎng)頁(yè)解析相關(guān)操作。這個(gè)操作類(lèi)似于pyquery的知識點(diǎn),直接觀(guān)察代碼就可以掌握。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for item in list_item:
title = item.css('.title::text').extract_first() # 直接獲取文本
url = item.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = item.css('.author::text').extract_first() # 直接獲取文本
print(title, url, author)
response.css 方法返回一個(gè)選擇器列表,可以對其進(jìn)行迭代,然后對其中的對象調用 css 方法。
在pm.py中導入items.py中的ArticleItem類(lèi),然后按照如下代碼修改:
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
<p>
item['author'] = author
yield item</p>
這時(shí)候scrapy爬蟲(chóng)運行時(shí),會(huì )出現如下提示信息。
至此一個(gè)單頁(yè)爬蟲(chóng)就完成了
接下來(lái)再次修改parse函數,解析完第一頁(yè)后,再解析第二頁(yè)的數據。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
item['author'] = author
yield item
next = response.css('.nav a:nth-last-child(2)::attr(href)').extract_first() # 獲取下一頁(yè)鏈接
# print(next)
# 再次生成一個(gè)請求
yield scrapy.Request(url=next, callback=self.parse)
上面代碼中,變量next代表下一頁(yè)的地址,通過(guò)response.css函數獲取鏈接。請重點(diǎn)學(xué)習css選擇器。
產(chǎn)量下降。request(url=next, callback=self.parse)表示重新創(chuàng )建一個(gè)請求,請求的回調函數是parse自身,代碼運行效果如下。
如果要保存運行結果,只需運行以下命令即可。
scrapy crawl pm -o pm.json
如果要將每條數據存儲為單獨的一行,請使用以下命令 scrapy crawl pm -o pm.jl 。
生成的文件還支持csv、xml、marchal、pickle,大家可以自己試試。
讓我們使用數據管道
打開(kāi)pipelines.py文件,修改類(lèi)名MyProjectPipeline→TitlePipeline,然后編譯如下代碼:
class TitlePipeline:
def process_item(self, item, spider): # 移除標題中的空格
if item["title"]:
item["title"] = item["title"].strip()
return item
else:
return DropItem("異常數據")
此代碼用于去除標題中的左右空格。
寫(xiě)入后需要在settings.py文件中開(kāi)啟ITEM_PIPELINES配置。
ITEM_PIPELINES = {
'my_project.pipelines.TitlePipeline': 300,
}
300是PIPELINES操作的優(yōu)先順序,可以根據需要修改。再次運行爬蟲(chóng)代碼,你會(huì )發(fā)現標題的左右空格已經(jīng)被去掉了。
至此,一個(gè)scrapy的基礎爬蟲(chóng)就寫(xiě)好了。
戳下方關(guān)注,第一時(shí)間了解華為云的新鮮技術(shù)~
華為云博客_大數據博客_人工智能博客_云計算博客_開(kāi)發(fā)者中心-華為云 查看全部
教程:dedecms織夢(mèng)TAG標簽調用代碼
標簽標簽
是一種自己定義的關(guān)鍵詞,比分類(lèi)更準確、更具體,可以概括文章主要內容,合理使用TAG標簽,可以讓你發(fā)表的文章更容易檢索。
很多網(wǎng)站首頁(yè)、列表頁(yè)和文章頁(yè)都用超鏈接調用TAG關(guān)鍵詞,有利于蜘蛛搜索和抓取,也有利于用戶(hù)點(diǎn)擊,那么如何在織夢(mèng)dedecms系統的網(wǎng)站上實(shí)現此功能呢?對此,做網(wǎng)站吧,整理出以下方法供大家使用:
1、TaT ?B 6g 標簽 o V % 的語(yǔ)法解釋
基本語(yǔ)法:
{dede:tag row='30' sort='new' getall='0′}
c B 8 r///a/dedejq/[field:link/]'>[field:tag /]
{/dede:tag}
參數說(shuō)明:
row=K z 9 W k \ B * x '30' 呼叫號碼為 30
sort='new' 排序 月, 蘭特, 周
getall='0' 獲取當前內容頁(yè)面 TAG 標記的類(lèi)型 0,以及獲取所有 TAG 標記的類(lèi)型 1。
基礎模板字段:鏈接、標記
2. 最新的標簽標簽稱(chēng)為
{dede:tag row='30' sort='new'}[字段:突出顯示/]
?。╗字段:結果/])
{/dede:tag}
3.調用本月熱門(mén)標簽標簽
{dede:tag row='30' sort='month'}I d s d stp:///a/dedejq/[field:link/]'>[field:
tagname/]([field:result/])
{/dede:tag}
4. 隨機標簽調用
{deu } ^de:tag row='60' sort='rand'}
$ J | m W 5 F /a/dedejq/[field:link/]'>[field:highlight/]([field:result/])
{/dede:tag}
5. 采集熱 [# W 0 V N L n – 門(mén)標簽,轉換后刷新
模板代碼:
{dede:tag row='10' sort='month' }
, E y u mom/a/dedejq/[field:link/]'>[field:tagname/] &o : T # hlt;/a>
{/dede:tag}
^ e 8 {t language=“JavaScript”>
偏移量){
tag_a.className=“tag”+(rnd-offsc y 2 4et);
}
}
}/
/–>
CSS代碼:
.tag1 { color:h Z j j m G i + X#339900; font-weight:bold; }
.tag2 { color:#e65730; }
.tag3 { color:#00b9da; }
.tag4 { color:#FG 2 4 C +E3981; 7 5 ) T [ Jfont-weighW Z P 7 } G &t:bold; font-size:14px; }
6. 在頁(yè)面文章調用標簽標簽
{J w % = S y p 8 gdede:tag table='dede_search_keywords' sort='keyword' row='2′ ifd O b y F=“}
\ L \dedejq/[field:link/]' target=_i 7 * # _blank>[field:tag /]
{/dede:tag}
或
{dede:fie# n : 2 [ r XLD name='Keywords' runphp='yes' }
if(!empty(@me)){
$kws = 爆炸(' ',@me);
@me = “”;
foreach($kws as $k){
@me .= “O / x 4 # '/tag.php?/$k/'>$k ”;
}

@me= str_repla' $ F 0 }ce('+', ' ',trim(@me));
}
{/dede:field}
7. 列表頁(yè)調用 TAG 標簽的兩個(gè) b # k F w D 方法
dedecms列表中的默認值無(wú)法調用 tag\q v C; _ X 標簽。Do 網(wǎng)站 G * { r p i, 7 n 為您提供以下不同版本的標簽標簽調用 T D G A p A are you 方法:
?。?)、de, w \decms 5.7 調用方法
首先,找到 include\helpers\archive.helper.php 文件(注:有些朋友會(huì )有疑問(wèn),首頁(yè)和頻道,列表應該添加不同的調用,但我開(kāi)始用列表頁(yè)面測試,成功;添加 m \ b v q r 首頁(yè)后,測試也進(jìn)入了 D Y G R U Y T + D 功能顯示,所以我沒(méi)有繼續深入研究,另外,這個(gè)文件的內容發(fā)生了變化,在后臺文件是無(wú)法更改的,提示 _&0 7 是注入 sql,所以要在 ftp 中找到這個(gè)文件來(lái)更改 0。)
在底部添加:
函數; f G GetTags_list($aid)
{
全球$dsql;
$tags = “;
$query = “從'ma_taglisi v \ at'中選擇標簽,其中aid='$aid'”;
~ w T $dsql->Execute('tag',$query);
0 I 5 + 2 y a s whil' j % s ~ we($row = $dsql->GetArray('tag'))
{
$tags .= ($tags==“ ?“9 R.Q e #<^ ) \ n 6;a hreb E H f Q uf='“.urlencode($row['tag']).”' &gl f _t;Y ] R 5 L t # = G“.$row['tag'].”“ : ','.”O % V x b ^ .i P /tags.php?/“.urlencode($row['tag']).”' >“.$row['tag'].”“);
}
返回 $tau P % @ rgs;
}
那么Q I S + v b H k,加上:,這里列表需要調用標簽標簽
[字段:id 函數=GetTags_list(@me)/]
以完成。
?。?)、dedecms 5K T y W + C g j.6 版本 G \ G Y # |G本的調用方法
方法一:
只需在模板需要的地方添加以下代碼:
[字段:ID runphp=yes]
$tsql = new DedeSql(false);
$tags = “B F e –;
$tsql->SetQuery(“選擇 i.tag 從 dede_taglist t 左連接 dede_tagindex i on i.id=t.tid 其中 t.an / ;E Zid='@me'“);
$tsql-e ) ;>ExG V q @ecute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “”.$row['tag'].“ &k u blt;/a>”;
}
@me=$tags;
[/字段:id]
注意:此步驟無(wú)法在 dede 5.7 中實(shí)現。
方法2:
打開(kāi) dedecms根目錄 T k Y ~include/common.func.php,在底部的 “!k ?A b O?>“在以下代碼之前:
讓我們做網(wǎng)站:列表頁(yè)調用標簽的方法
函數列表標簽($aid)
{
$tsql = new DedeSql(false);
$tags = “;{ ( n : u X ' , m
$tsql->SetQuery(“Select i.tag FrM .o 9 Oom dt 7 ;2 j ] ^ede_taglist t left join dede_tagindex i on i.id=t.tid where t.aid='$aid'“);
$tsql->執行('t');
whi– x W s e – ale($row = $tsql->GetArray('t',MYSQL_ASSOC)){7 C \ j
$tags .= “D ( & 6lencode($row['tag']).” /'>“.$rowj 0 Y ? x v z o J['tag'].”";
}% W ?z F |_ = i
雷圖]U Y骨灰盒$tags;
}
{@ ? n i 2 0 , 5 4dede:field.id runphp=yes}
$tsql = new DedeSql(false);
$tags = “;

$tsql->SetQuery(“Select i.tag From ded\ } q |e_taglist t left join dede_tak f 4gindex i on i.id=t.tid where t.aid='@me'”);
$' 1 ~tsql->Execute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “e D Hhp?/”.urlencode($row['tag']).“' >”.$row['tag'].“”;
}
@me=$# A F ytags;
{/dede:field.id}
添加代碼 6 j't*$x 后,可以使用列表頁(yè):
{m s s C $dede:field.id function=“l(fā)isttag(@me)”/}
以調用標簽標簽。
方法三:
inc_functions.php 添加 :
函數列表標記($aid){
$tsql = new DedeSql(p ' w x 8 Q 3 s tfalse);
$tags = “;
$tsql->SetQuery(“Select i.tagname From xkzzz_tag_list t left join xkzzz_tu 4 t \ 0 { x gag_index i on i.id=t.tid where t.aid='$aid'”);
$tsql->執行('t');
while($row = $tsql->Getj [ x &Array('t'{ N f M K v S,MYSQL_AO r _ 0 |SSOC)){
$tags .= “s 1 j { ~ + !/tag.php?/”.urlencodeE # 6 [ z H 0 V Y($row['tagname']).“' >”.$rowu F G y A ,['tagname'].“”;
}
+ _ c j c 6 d 返回$tags;
}
然后添加 :,其中列表頁(yè)位于
[字段:ID 函數=“列表標記(@me)”/]
可以調出來(lái),但是這個(gè)方法也需要更改程序文件,看不懂代碼的朋友,慎用吧!
8. 首頁(yè)調用該方法文章 Tg j LAG 標簽
如果您網(wǎng)站使用 dedecms v5.7 可以使用以下標簽:
徑直
[field:id function=GetTags(@me)/]
可以調出,但不能調出g Y # k x s T O \沒(méi)有連接,為了添加標簽標簽的鏈接,還需要做到以下幾點(diǎn):
首先,注 4 + z { # 。E % 刪除 130 行收錄/幫助程序/存檔.helper.php 文件
$tags .= ($tags==“ ? $row['標簽'] : ','.$row['標簽']);
用以下?!C 語(yǔ)句替換,當然是 J { |R 您還可以添加自己的樣式:
$tags .= “_ % k a !php?/”.urlencode($row['tag']).“ /'>”.$row['tag'].”";
添加 # z ; ! p t ] o 下一代 { 0 H R i 代碼:
if ( ! function_exists(7 h * Y 0 r Q'GetTagk')){
函數 GetTagk($aid)
{@ / ! ; * K { i
全球$dsql;
$tagk = “;
$query = “選擇標簽,從'ma_taglist'中輔助,其中aid='$aid'”;
$dsql->Execute('tagD v ^ n b',$query);
while($row = $dsql->GetArray('tag'))
{
$tagk .= ($t\ Z * & \ } 3agk==“n 1 i ? $row['tag'] : ','.$row['tag']);
}
返回 $ta 2 V )O { mgk;
}
}
然后,打開(kāi) dede/a( h m^ Jrticle_edit.php 找到:
$tags = Gf I j DetTags($aid);
添加以下內容:
$t( H e ~ M T 8 | *agk = GetTagk($o Q D Jaid);
打開(kāi) dede/tempj x z t F n h mlets/article_edit.htm 再次調用標簽標簽
學(xué)習筆記:學(xué)python,怎么能不學(xué)習scrapy呢
本文分享自華為云社區《學(xué)python怎么能不學(xué)scrapy?本博客帶你學(xué)起來(lái)-云社區-華為云》,作者:橡皮擦。
在正式寫(xiě)爬蟲(chóng)案例之前,我們先系統地了解一下scrapy。
scrapy安裝和簡(jiǎn)單操作
使用命令pip install scrapy進(jìn)行安裝。安裝成功后,需要采集幾個(gè)網(wǎng)址,方便后續學(xué)習使用。
安裝完成后,直接在控制臺輸入scrapy,出現如下命令即表示安裝成功。
> scrapy
Scrapy 2.5.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
上圖是scrapy內置命令列表,標準格式的scrapy,可以通過(guò)scrapy -h查看指定命令的幫助手冊。
scrapy中有兩種命令,一種是全局的,一種是項目中的。后者需要進(jìn)入scrapy目錄才能運行。
這些命令一開(kāi)始不需要完全記住,隨時(shí)可以查看。還有幾個(gè)比較常用的,例如:
**scrpy 啟動(dòng)項目**
該命令首先根據項目名稱(chēng)創(chuàng )建一個(gè)文件夾,然后在該文件夾下創(chuàng )建一個(gè)scrpy項目。這一步是所有后續代碼的起點(diǎn)。
> scrapy startproject my_scrapy
> New Scrapy project 'my_scrapy', using template directory 'e:\pythonproject\venv\lib\site-packages\scrapy\templates\project', created in: # 一個(gè)新的 scrapy 項目被創(chuàng )建了,使用的模板是 XXX,創(chuàng )建的位置是 XXX
E:\pythonProject\滾雪球學(xué)Python第4輪\my_scrapy
You can start your first spider with: # 開(kāi)啟你的第一個(gè)爬蟲(chóng)程序
cd my_scrapy # 進(jìn)入文件夾
scrapy genspider example example.com # 使用項目命令創(chuàng )建爬蟲(chóng)文件
以上內容添加了一些評論,可以對照學(xué)習。默認生成的文件位于 python 運行時(shí)目錄中。如果要修改項目目錄,請使用如下格式化命令:
scrapy startproject myproject [project_dir]
例如
scrapy startproject myproject d:/d1
命令基于模板創(chuàng )建的項目結構如下,其中紅色下劃線(xiàn)為項目目錄,綠色下劃線(xiàn)為scrapy項目。如果要運行項目命令,首先要進(jìn)入項目目錄下紅色下劃線(xiàn)的my_scrapy文件夾??刂祈椖?。
下面生成爬蟲(chóng)文件
使用命令scrapy genspider [-t template]生成爬蟲(chóng)文件。該方法是快捷操作,也可以手動(dòng)創(chuàng )建。創(chuàng )建的爬蟲(chóng)文件會(huì )出現在當前目錄或項目文件夾下的spiders文件夾中,name為爬蟲(chóng)名稱(chēng),domain用于爬蟲(chóng)文件中allowed_domains和start_urls數據,[-t template]表示可以選擇生成文件模板。
要查看所有模板,請使用以下命令,默認模板是 basic。
> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed
創(chuàng )建第一個(gè)scrapy爬蟲(chóng)文件,測試命令如下:
>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm
這時(shí)在spiders文件夾中,出現了pm.py文件,文件內容如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['imspm.com']
start_urls = ['http://imspm.com/']
def parse(self, response):
pass
測試 scrapy 爬蟲(chóng)運行
使用命令scrapy crawl,spider是上面生成的爬蟲(chóng)文件名,如果出現如下內容,說(shuō)明爬蟲(chóng)加載正確。
>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]
scrapy的基本應用
scrapy 的工作流程非常簡(jiǎn)單:
采集首頁(yè)源碼;分析首頁(yè)源碼,獲取下一頁(yè)鏈接;請求下一頁(yè)的源代碼;解析源碼,獲取下一頁(yè)的源碼;[…] 過(guò)程中,提取到目標數據后,保存。
下面給大家展示一個(gè)scrapy的完整案例應用,作為爬蟲(chóng)120案例scrapy部分的第一個(gè)例子。
> scrapy startproject my_project 爬蟲(chóng)
> cd 爬蟲(chóng)
<p>

> scrapy genspider pm imspm.com</p>
得到項目結構如下:
對上圖中部分文件的簡(jiǎn)要說(shuō)明。
使用scrapy crawl pm運行爬蟲(chóng)后,所有的輸出和描述如下:
上面代碼的請求次數是7次,因為pm.py文件中默認沒(méi)有添加www。如果添加此內容,則請求數變?yōu)?4。
當前pm.py文件代碼如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['www.imspm.com']
start_urls = ['http://www.imspm.com/']
def parse(self, response):
print(response.text)
其中的parse是指請求start_urls中的地址,得到response后的回調函數,通過(guò)參數response的.text屬性直接輸出網(wǎng)頁(yè)源碼。
獲取到源碼后,需要對源碼進(jìn)行解析存儲
在存儲之前,需要手動(dòng)定義一個(gè)數據結構,在items.py文件中實(shí)現,修改代碼中的類(lèi)名,MyProjectItem → ArticleItem。
import scrapy
class ArticleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() # 文章標題
url = scrapy.Field() # 文章地址
author = scrapy.Field() # 作者
修改pm.py文件中的parse函數,增加網(wǎng)頁(yè)解析相關(guān)操作。這個(gè)操作類(lèi)似于pyquery的知識點(diǎn),直接觀(guān)察代碼就可以掌握。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for item in list_item:
title = item.css('.title::text').extract_first() # 直接獲取文本
url = item.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = item.css('.author::text').extract_first() # 直接獲取文本
print(title, url, author)
response.css 方法返回一個(gè)選擇器列表,可以對其進(jìn)行迭代,然后對其中的對象調用 css 方法。
在pm.py中導入items.py中的ArticleItem類(lèi),然后按照如下代碼修改:
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
<p>

item['author'] = author
yield item</p>
這時(shí)候scrapy爬蟲(chóng)運行時(shí),會(huì )出現如下提示信息。
至此一個(gè)單頁(yè)爬蟲(chóng)就完成了
接下來(lái)再次修改parse函數,解析完第一頁(yè)后,再解析第二頁(yè)的數據。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
item['author'] = author
yield item
next = response.css('.nav a:nth-last-child(2)::attr(href)').extract_first() # 獲取下一頁(yè)鏈接
# print(next)
# 再次生成一個(gè)請求
yield scrapy.Request(url=next, callback=self.parse)
上面代碼中,變量next代表下一頁(yè)的地址,通過(guò)response.css函數獲取鏈接。請重點(diǎn)學(xué)習css選擇器。
產(chǎn)量下降。request(url=next, callback=self.parse)表示重新創(chuàng )建一個(gè)請求,請求的回調函數是parse自身,代碼運行效果如下。
如果要保存運行結果,只需運行以下命令即可。
scrapy crawl pm -o pm.json
如果要將每條數據存儲為單獨的一行,請使用以下命令 scrapy crawl pm -o pm.jl 。
生成的文件還支持csv、xml、marchal、pickle,大家可以自己試試。
讓我們使用數據管道
打開(kāi)pipelines.py文件,修改類(lèi)名MyProjectPipeline→TitlePipeline,然后編譯如下代碼:
class TitlePipeline:
def process_item(self, item, spider): # 移除標題中的空格
if item["title"]:
item["title"] = item["title"].strip()
return item
else:
return DropItem("異常數據")
此代碼用于去除標題中的左右空格。
寫(xiě)入后需要在settings.py文件中開(kāi)啟ITEM_PIPELINES配置。
ITEM_PIPELINES = {
'my_project.pipelines.TitlePipeline': 300,
}
300是PIPELINES操作的優(yōu)先順序,可以根據需要修改。再次運行爬蟲(chóng)代碼,你會(huì )發(fā)現標題的左右空格已經(jīng)被去掉了。
至此,一個(gè)scrapy的基礎爬蟲(chóng)就寫(xiě)好了。
戳下方關(guān)注,第一時(shí)間了解華為云的新鮮技術(shù)~
華為云博客_大數據博客_人工智能博客_云計算博客_開(kāi)發(fā)者中心-華為云
解決方案:VS2022基于C語(yǔ)言的動(dòng)態(tài)鏈接庫創(chuàng )建與調用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 331 次瀏覽 ? 2022-11-17 00:21
//extern "C",告訴編譯器它所修飾的代碼按c語(yǔ)言方式編譯
//"__declspec(dllexport)",告訴編譯器和鏈接器此函數需要從DLL導出
extern "C" _declspec(dllexport) int Sour_Initialize(char* rsrcname);
//函數原型所依賴(lài)的lib文件
#pragma comment(lib, "test.lib")
5.關(guān)閉一些錯誤警告
對于 Visual Studio 庫中的許多函數、成員函數、函數模板和全局變量,此錯誤已棄用。一些函數/變量(例如 POSIX 和 Microsoft 特定函數)已被棄用,因為它們現在使用不同的首選名稱(chēng)。一些 C 運行時(shí)庫函數已被棄用,因為它們不安全,現在有更安全的變體。其他函數/變量已棄用,因為它們已過(guò)時(shí)。棄用消息通常包括已棄用函數或全局變量的建議替換。
我這里試試沒(méi)有錯,在函數聲明的頭文件中加入如下代碼,直接關(guān)閉提示
#pragma warning(disable : 4996)
<p>
</p>
6.編譯
生成的庫需要在32位環(huán)境下編譯,這里選擇x86
如果成功,在項目文件夾中尋找DEBUG文件夾,會(huì )生成需要的DLL文件和LIB文件
三、調用動(dòng)態(tài)鏈接庫 1、創(chuàng )建項目
選擇控制臺應用程序
2.復制dll文件和lib文件
將剛剛創(chuàng )建的dll文件和lib文件復制到本項目的文件夾中
3. 添加.dll、.lib、.h文件
將聲明函數原型的.dll文件、.lib文件和.h文件添加到項目中
4.修改.h文件
在.h文件中添加以下代碼
#pragma once
//函數原型所依賴(lài)的lib庫
#pragma comment(lib, "test.lib")
//剛剛生成的lib庫
#pragma comment(lib, "TestDLL.lib")
將函數聲明前的“extern "C" _declspec(dllexport)" 更改為 "extern "C" _declspec(dllimport)"
extern "C" _declspec(dllimport) int Sour_Initialize(char* rsrcname);
5.main函數編寫(xiě)調用邏輯
在你寫(xiě)的函數的main函數中調用就可以了。
核心方法:內容和標記SEO分析工具
您的 網(wǎng)站 頁(yè)面排名因素來(lái)自 網(wǎng)站 內容和標記。因此,優(yōu)化內容并盡量減少標記中的錯誤非常重要。
1.SEO瀏覽器
SEO 瀏覽器是最古老的免費 SEO 工具之一,但它仍然非常有用。該工具是 100% 免費的,它提供兩種模式:簡(jiǎn)單模式和高級模式。簡(jiǎn)單模式像基于文本的 Web 瀏覽器(例如,lynx)一樣顯示給定的 URL。高級模式提供基于文本的 URL 視圖,它還包括總結 URL 內容的有用信息(例如頁(yè)面標題、元標記、頁(yè)面大小、字數、IP 地址等)。
2. 復制景觀(guān)
Copyscape 是一種使用免費增值模式的在線(xiàn)重復內容檢測工具。您只需輸入頁(yè)面的 URL,該工具就會(huì )返回重復該 URL 內容的頁(yè)面列表。對于免費帳戶(hù),該工具僅顯示前十名結果,并且該工具每月僅允許來(lái)自任何給定站點(diǎn)的一定數量的請求(此限制與通過(guò) IP 提交請求無(wú)關(guān))。
3.W3C 標記驗證服務(wù)
W3C 標記驗證服務(wù) 標記驗證服務(wù)是一個(gè)免費的在線(xiàn)工具,用于檢查與給定 URI 關(guān)聯(lián)的 Web 文檔的標記有效性。您只需輸入一個(gè) URI,該工具就會(huì )檢查它的正確性(基于其文檔類(lèi)型的語(yǔ)法)。最后,該工具會(huì )顯示在驗證過(guò)程中發(fā)現的錯誤和警告的逐項列表(具有相應的行號和列號)。
歷史上的今天: 查看全部
解決方案:VS2022基于C語(yǔ)言的動(dòng)態(tài)鏈接庫創(chuàng )建與調用
//extern "C",告訴編譯器它所修飾的代碼按c語(yǔ)言方式編譯
//"__declspec(dllexport)",告訴編譯器和鏈接器此函數需要從DLL導出
extern "C" _declspec(dllexport) int Sour_Initialize(char* rsrcname);
//函數原型所依賴(lài)的lib文件
#pragma comment(lib, "test.lib")
5.關(guān)閉一些錯誤警告
對于 Visual Studio 庫中的許多函數、成員函數、函數模板和全局變量,此錯誤已棄用。一些函數/變量(例如 POSIX 和 Microsoft 特定函數)已被棄用,因為它們現在使用不同的首選名稱(chēng)。一些 C 運行時(shí)庫函數已被棄用,因為它們不安全,現在有更安全的變體。其他函數/變量已棄用,因為它們已過(guò)時(shí)。棄用消息通常包括已棄用函數或全局變量的建議替換。
我這里試試沒(méi)有錯,在函數聲明的頭文件中加入如下代碼,直接關(guān)閉提示
#pragma warning(disable : 4996)
<p>

</p>
6.編譯
生成的庫需要在32位環(huán)境下編譯,這里選擇x86
如果成功,在項目文件夾中尋找DEBUG文件夾,會(huì )生成需要的DLL文件和LIB文件
三、調用動(dòng)態(tài)鏈接庫 1、創(chuàng )建項目
選擇控制臺應用程序
2.復制dll文件和lib文件
將剛剛創(chuàng )建的dll文件和lib文件復制到本項目的文件夾中
3. 添加.dll、.lib、.h文件
將聲明函數原型的.dll文件、.lib文件和.h文件添加到項目中
4.修改.h文件

在.h文件中添加以下代碼
#pragma once
//函數原型所依賴(lài)的lib庫
#pragma comment(lib, "test.lib")
//剛剛生成的lib庫
#pragma comment(lib, "TestDLL.lib")
將函數聲明前的“extern "C" _declspec(dllexport)" 更改為 "extern "C" _declspec(dllimport)"
extern "C" _declspec(dllimport) int Sour_Initialize(char* rsrcname);
5.main函數編寫(xiě)調用邏輯
在你寫(xiě)的函數的main函數中調用就可以了。
核心方法:內容和標記SEO分析工具
您的 網(wǎng)站 頁(yè)面排名因素來(lái)自 網(wǎng)站 內容和標記。因此,優(yōu)化內容并盡量減少標記中的錯誤非常重要。
1.SEO瀏覽器

SEO 瀏覽器是最古老的免費 SEO 工具之一,但它仍然非常有用。該工具是 100% 免費的,它提供兩種模式:簡(jiǎn)單模式和高級模式。簡(jiǎn)單模式像基于文本的 Web 瀏覽器(例如,lynx)一樣顯示給定的 URL。高級模式提供基于文本的 URL 視圖,它還包括總結 URL 內容的有用信息(例如頁(yè)面標題、元標記、頁(yè)面大小、字數、IP 地址等)。
2. 復制景觀(guān)
Copyscape 是一種使用免費增值模式的在線(xiàn)重復內容檢測工具。您只需輸入頁(yè)面的 URL,該工具就會(huì )返回重復該 URL 內容的頁(yè)面列表。對于免費帳戶(hù),該工具僅顯示前十名結果,并且該工具每月僅允許來(lái)自任何給定站點(diǎn)的一定數量的請求(此限制與通過(guò) IP 提交請求無(wú)關(guān))。

3.W3C 標記驗證服務(wù)
W3C 標記驗證服務(wù) 標記驗證服務(wù)是一個(gè)免費的在線(xiàn)工具,用于檢查與給定 URI 關(guān)聯(lián)的 Web 文檔的標記有效性。您只需輸入一個(gè) URI,該工具就會(huì )檢查它的正確性(基于其文檔類(lèi)型的語(yǔ)法)。最后,該工具會(huì )顯示在驗證過(guò)程中發(fā)現的錯誤和警告的逐項列表(具有相應的行號和列號)。
歷史上的今天:
技巧:“手把手”的性能優(yōu)化文章來(lái)了!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-11-16 12:37
通過(guò)setFactory,我們不僅可以控制View的生成,甚至可以將一個(gè)View變成另一個(gè)View。比如文章中,我們把TextView變成了Button。
后續的換皮和一些黑白的方案都是以此為基礎。
這意味著(zhù)我們現在可以:
在運行時(shí),接管某個(gè)View的生成,也就是我們可以去掉單個(gè)View標簽的反射邏輯。
相似代碼:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}
<br />
但是一般網(wǎng)上的項目都很大,可能會(huì )有各種自定義的View,類(lèi)似上面的if else,怎么寫(xiě)呢?
先采集,再手寫(xiě)?
如何采集項目中使用的所有View?
假設我們采集了,如果是手寫(xiě),項目一般都是增量的,那新加的View呢?
我們可以看到我們面臨兩個(gè)問(wèn)題:
如何采集項目中xml中使用的View;
如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
3 確定方案
目標已經(jīng)在這里確定了。
在xml->View的過(guò)程中,去掉反射相關(guān)的邏輯
下面說(shuō)一下如何解決我們面臨的兩個(gè)問(wèn)題:
1、如何采集項目中xml中使用的View;
采集所有xml中用到的View,有一個(gè)簡(jiǎn)單的思路,我們可以解析項目中所有的layout.xml文件,但是項目中的layout.xml文件有各個(gè)module,有些依賴(lài)的aars需要解壓太難.
仔細想想,在我們apk的生成過(guò)程中,資源應該是需要合并的,是否是解析某個(gè)Task合并后的產(chǎn)物。
確實(shí),具體的實(shí)現會(huì )在后面說(shuō)到。
我們來(lái)看第二個(gè)問(wèn)題:
2、如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
我們已經(jīng)能夠采集所有使用過(guò)的視圖列表,因此為此:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}<br />
邏輯規則,簡(jiǎn)單,編譯時(shí)生成一個(gè)代碼類(lèi),完成相關(guān)的轉換代碼生成。這里我選擇apt。
有了xml->View轉換邏輯的代碼類(lèi),只需要在運行時(shí)使用LayoutFactory注入即可。
3.找到安全的注入邏輯
大家都知道我們View生成相關(guān)的邏輯在LayoutInflater下面的代碼中:
View?createViewFromTag(View?parent,?String?name,?Context?context,?AttributeSet?attrs,<br />????????boolean?ignoreThemeAttr)?{<br />???????//?...<br />????View?view;<br />????if?(mFactory2?!=?null)?{<br />????????view?=?mFactory2.onCreateView(parent,?name,?context,?attrs);<br />????}?else?if?(mFactory?!=?null)?{<br />????????view?=?mFactory.onCreateView(name,?context,?attrs);<br />????}?else?{<br />????????view?=?null;<br />????}<br /><br />????if?(view?==?null?&&?mPrivateFactory?!=?null)?{<br />????????view?=?mPrivateFactory.onCreateView(parent,?name,?context,?attrs);<br />????}<br /><br />????if?(view?==?null)?{<br />????????final?Object?lastContext?=?mConstructorArgs[0];<br />????????mConstructorArgs[0]?=?context;<br />????????try?{<br />????????????if?(-1?==?name.indexOf('.'))?{<br />????????????????view?=?onCreateView(parent,?name,?attrs);<br />????????????}?else?{<br />????????????????view?=?createView(name,?null,?attrs);<br />????????????}<br />????????}?finally?{<br />????????????mConstructorArgs[0]?=?lastContext;<br />????????}<br />????}<br /><br />????return?view;<br /><br />}<br />
<br />
View通過(guò)mFactory2、mFactory和mPrivateFactory。建不完,后面等待的就是反思。
前兩個(gè)工廠(chǎng)和支持包一般用于擴展功能,比如TextView->AppCompatTextView。
我們考慮使用 mPrivateFactory。使用mPrivateFactory的好處是,在當前版本中,mPrivateFactory是Activity,所以我們只需要重寫(xiě)Activity的onCreateView即可:
這樣一來(lái),完全不需要hooks,也不會(huì )干擾appcompat相關(guān)的生成邏輯,可謂是零風(fēng)險。
4 開(kāi)始實(shí)施
1.獲取項目中使用的控件名稱(chēng)列表
我新建了一個(gè)工程,在布局文件中寫(xiě)了一些自定義控件,分別叫MyMainView1、MyMainView、MyMainView3、MyMainView4,布局文件就不貼了。
正如我們之前所說(shuō),我們需要在構建apk的過(guò)程中找到一個(gè)合適的注入點(diǎn)來(lái)完成這個(gè)任務(wù)。
那么在apk構建過(guò)程中,什么時(shí)候會(huì )合并資源呢?
我們把構建過(guò)程中的所有任務(wù)打印出來(lái),輸入命令:
./gradlew??app:assembleDebug?--console=plain<br />
<br />
輸出:
>Task?:app:preBuild?UP-TO-DATE<br />>?Task?:app:preDebugBuild?UP-TO-DATE<br />>?Task?:app:checkDebugManifest?UP-TO-DATE<br />>?Task?:app:generateDebugBuildConfig?UP-TO-DATE<br />>?Task?:app:javaPreCompileDebug?UP-TO-DATE<br />>?Task?:app:mainApkListPersistenceDebug?UP-TO-DATE<br />>?Task?:app:generateDebugResValues?UP-TO-DATE<br />>?Task?:app:createDebugCompatibleScreenManifests?UP-TO-DATE<br />>?Task?:app:mergeDebugShaders?UP-TO-DATE<br />>?Task?:app:compileDebugShaders?UP-TO-DATE<br />>?Task?:app:generateDebugAssets?UP-TO-DATE<br />>?Task?:app:compileDebugAidl?NO-SOURCE<br />>?Task?:app:compileDebugRenderscript?NO-SOURCE<br />>?Task?:app:generateDebugResources?UP-TO-DATE<br />>?Task?:app:mergeDebugResources?UP-TO-DATE<br />>?Task?:app:processDebugManifest?UP-TO-DATE<br />>?Task?:app:processDebugResources?UP-TO-DATE<br />>?Task?:app:compileDebugJavaWithJavac?UP-TO-DATE<br />>?Task?:app:compileDebugSources?UP-TO-DATE<br />>?Task?:app:mergeDebugAssets?UP-TO-DATE<br />>?Task?:app:processDebugJavaRes?NO-SOURCE<br />>?Task?:app:mergeDebugJavaResource?UP-TO-DATE<br />>?Task?:app:transformClassesWithDexBuilderForDebug?UP-TO-DATE<br />>?Task?:app:checkDebugDuplicateClasses?UP-TO-DATE<br />>?Task?:app:validateSigningDebug?UP-TO-DATE<br />>?Task?:app:mergeExtDexDebug?UP-TO-DATE<br />>?Task?:app:mergeDexDebug?UP-TO-DATE<br />>?Task?:app:signingConfigWriterDebug?UP-TO-DATE<br />>?Task?:app:mergeDebugJniLibFolders?UP-TO-DATE<br />>?Task?:app:mergeDebugNativeLibs?UP-TO-DATE<br />>?Task?:app:stripDebugDebugSymbols?UP-TO-DATE<br />>?Task?:app:packageDebug?UP-TO-DATE<br />>?Task?:app:assembleDebug?UP-TO-DATE<br />
<br />
哪一個(gè)最像?一看就有一個(gè)Task叫:mergeDebugResources,就是這樣。
對應build目錄,還有一個(gè)mergeDebugResources目錄:
注意里面有一個(gè)merger.xml,里面收錄了整個(gè)項目所有資源的合并內容。
我們打開(kāi)看看:
關(guān)注里面type=layout的相關(guān)標簽。
<br />
<br />
可以看到收錄我們布局文件的路徑,那么我們只需要解析這個(gè)merger.xml,然后在里面找到所有type=layout的標簽,然后解析出布局文件的實(shí)際路徑,然后解析出相應的layout xml來(lái)獲取控件的名稱(chēng)。
對了,這個(gè)任務(wù)需要注入到mergeDebugResources中執行。
如何注入任務(wù)?
很簡(jiǎn)單:
project.afterEvaluate?{<br />????def?mergeDebugResourcesTask?=?project.tasks.findByName("mergeDebugResources")<br />????if?(mergeDebugResourcesTask?!=?null)?{<br />????????def?resParseDebugTask?=?project.tasks.create("ResParseDebugTask",?ResParseTask.class)<br />????????resParseDebugTask.isDebug?=?true<br />????????mergeDebugResourcesTask.finalizedBy(resParseDebugTask);<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
我們首先找到mergeDebugResources任務(wù),然后注入一個(gè)ResParseTask任務(wù)。
然后在ResParseTask中完成文件解析:
<br />
class?ResParseTask?extends?DefaultTask?{<br />????File?viewNameListFile<br />????boolean?isDebug<br />????HashSet?viewSet?=?new?HashSet()<br />????//?自己根據輸出幾個(gè)添加<br />????List?ignoreViewNameList?=?Arrays.asList("include",?"fragment",?"merge",?"view","DateTimeView")<br /><br />????@TaskAction<br />????void?doTask()?{<br /><br />????????File?distDir?=?new?File(project.buildDir,?"tmp_custom_views")<br />????????if?(!distDir.exists())?{<br />????????????distDir.mkdirs()<br />????????}<br />????????viewNameListFile?=?new?File(distDir,?"custom_view_final.txt")<br />????????if?(viewNameListFile.exists())?{<br />????????????viewNameListFile.delete()<br />????????}<br />????????viewNameListFile.createNewFile()<br />????????viewSet.clear()<br />????????viewSet.addAll(ignoreViewNameList)<br /><br />????????try?{<br />????????????File?resMergeFile?=?new?File(project.buildDir,?"/intermediates/incremental/merge"?+?(isDebug???"Debug"?:?"Release")?+?"Resources/merger.xml")<br /><br />????????????println("resMergeFile:${resMergeFile.getAbsolutePath()}?===?${resMergeFile.exists()}")<br /><br />????????????if?(!resMergeFile.exists())?{<br />????????????????return<br />????????????}<br /><br />????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????GPathResult?result?=?slurper.parse(resMergeFile)<br />????????????if?(result.children()?!=?null)?{<br />????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????if?(o?instanceof?Node)?{<br />????????????????????????parseNode(o)<br />????????????????????}<br />????????????????})<br />????????????}<br /><br /><br />????????}?catch?(Throwable?e)?{<br />????????????e.printStackTrace()<br />????????}<br /><br />????}<br /><br />????void?parseNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????if?(node.name()?==?"file"?&&?node.attributes.get("type")?==?"layout")?{<br />????????????String?layoutPath?=?node.attributes.get("path")<br />????????????try?{<br />????????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????????GPathResult?result?=?slurper.parse(layoutPath)<br /><br />????????????????String?viewName?=?result.name();<br />????????????????if?(viewSet.add(viewName))?{<br />????????????????????viewNameListFile.append("${viewName}\n")<br />????????????????}<br />????????????????if?(result.children()?!=?null)?{<br />????????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????????if?(o?instanceof?Node)?{<br />????????????????????????????parseLayoutNode(o)<br />????????????????????????}<br />????????????????????})<br />????????????????}<br />????????????}?catch?(Throwable?e)?{<br />????????????????e.printStackTrace();<br />????????????}<br /><br />????????}?else?{<br />????????????node.childNodes().forEachRemaining({?o?-><br />????????????????if?(o?instanceof?Node)?{<br />????????????????????parseNode(o)<br />????????????????}<br />????????????})<br />????????}<br /><br />????}<br /><br />????void?parseLayoutNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????String?viewName?=?node.name()<br />????????if?(viewSet.add(viewName))?{<br />????????????viewNameListFile.append("${viewName}\n")<br />????????}<br />????????if?(node.childNodes().size()?<br />????????????if?(o?instanceof?Node)?{<br />????????????????parseLayoutNode(o)<br />????????????}<br />????????})<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
代碼很簡(jiǎn)單,主要就是解析merge.xml,找到所有的布局文件,然后解析xml,最后輸出到build目錄。
我們都把代碼寫(xiě)在位于項目根目錄的view_opt.gradle中,應用在app的build.gradle中:
<br />
apply?from:?rootProject.file('view_opt.gradle')<br />
<br />
然后我們再次運行assembleDebug,輸出:
注意上面我們還有一個(gè)ignoreViewNameList對象,我們過(guò)濾了一些特殊的標簽,比如:“include”、“fragment”、“merge”、“view”,你可以根據輸出結果自行添加。
輸出是:
可以看到是去重View的名字。
在這里提一下,很多同學(xué)看到寫(xiě)gradle腳本都會(huì )感到害怕。其實(shí)很簡(jiǎn)單。你可以只寫(xiě)Java。如果不熟悉語(yǔ)法,可以用Java寫(xiě)。沒(méi)有什么特別的。
在這一點(diǎn)上,我們有所有使用的視圖的名稱(chēng)。
2.apt生成代理類(lèi)
有了所有用到的View的名字,然后我們用apt生成一個(gè)代理類(lèi)和代理方法。
要使用 apt,我們需要創(chuàng )建 3 個(gè)新模塊:
ViewOptAnnotation:存儲注解;
ViewOptProcessor:放注解處理器相關(guān)代碼;
ViewOptApi:放相關(guān)API。
關(guān)于A(yíng)pt的基礎知識就不說(shuō)了。這塊知識太復雜了。你可以自己查一下。后面我會(huì )把demo上傳到github,大家自己看看。
直接看我們的核心Processor類(lèi):
<p>@AutoService(Processor.class)<br />public?class?ViewCreatorProcessor?extends?AbstractProcessor?{<br /><br />????private?Messager?mMessager;<br /><br /><br />????@Override<br />????public?synchronized?void?init(ProcessingEnvironment?processingEnvironment)?{<br />????????super.init(processingEnvironment);<br />????????mMessager?=?processingEnv.getMessager();<br />????}<br /><br />????@Override<br />????public?boolean?process(Set 查看全部
技巧:“手把手”的性能優(yōu)化文章來(lái)了!
通過(guò)setFactory,我們不僅可以控制View的生成,甚至可以將一個(gè)View變成另一個(gè)View。比如文章中,我們把TextView變成了Button。
后續的換皮和一些黑白的方案都是以此為基礎。
這意味著(zhù)我們現在可以:
在運行時(shí),接管某個(gè)View的生成,也就是我們可以去掉單個(gè)View標簽的反射邏輯。
相似代碼:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}
<br />
但是一般網(wǎng)上的項目都很大,可能會(huì )有各種自定義的View,類(lèi)似上面的if else,怎么寫(xiě)呢?
先采集,再手寫(xiě)?
如何采集項目中使用的所有View?
假設我們采集了,如果是手寫(xiě),項目一般都是增量的,那新加的View呢?
我們可以看到我們面臨兩個(gè)問(wèn)題:
如何采集項目中xml中使用的View;
如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
3 確定方案
目標已經(jīng)在這里確定了。
在xml->View的過(guò)程中,去掉反射相關(guān)的邏輯
下面說(shuō)一下如何解決我們面臨的兩個(gè)問(wèn)題:
1、如何采集項目中xml中使用的View;
采集所有xml中用到的View,有一個(gè)簡(jiǎn)單的思路,我們可以解析項目中所有的layout.xml文件,但是項目中的layout.xml文件有各個(gè)module,有些依賴(lài)的aars需要解壓太難.
仔細想想,在我們apk的生成過(guò)程中,資源應該是需要合并的,是否是解析某個(gè)Task合并后的產(chǎn)物。
確實(shí),具體的實(shí)現會(huì )在后面說(shuō)到。
我們來(lái)看第二個(gè)問(wèn)題:
2、如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
我們已經(jīng)能夠采集所有使用過(guò)的視圖列表,因此為此:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}<br />
邏輯規則,簡(jiǎn)單,編譯時(shí)生成一個(gè)代碼類(lèi),完成相關(guān)的轉換代碼生成。這里我選擇apt。
有了xml->View轉換邏輯的代碼類(lèi),只需要在運行時(shí)使用LayoutFactory注入即可。
3.找到安全的注入邏輯
大家都知道我們View生成相關(guān)的邏輯在LayoutInflater下面的代碼中:
View?createViewFromTag(View?parent,?String?name,?Context?context,?AttributeSet?attrs,<br />????????boolean?ignoreThemeAttr)?{<br />???????//?...<br />????View?view;<br />????if?(mFactory2?!=?null)?{<br />????????view?=?mFactory2.onCreateView(parent,?name,?context,?attrs);<br />????}?else?if?(mFactory?!=?null)?{<br />????????view?=?mFactory.onCreateView(name,?context,?attrs);<br />????}?else?{<br />????????view?=?null;<br />????}<br /><br />????if?(view?==?null?&&?mPrivateFactory?!=?null)?{<br />????????view?=?mPrivateFactory.onCreateView(parent,?name,?context,?attrs);<br />????}<br /><br />????if?(view?==?null)?{<br />????????final?Object?lastContext?=?mConstructorArgs[0];<br />????????mConstructorArgs[0]?=?context;<br />????????try?{<br />????????????if?(-1?==?name.indexOf('.'))?{<br />????????????????view?=?onCreateView(parent,?name,?attrs);<br />????????????}?else?{<br />????????????????view?=?createView(name,?null,?attrs);<br />????????????}<br />????????}?finally?{<br />????????????mConstructorArgs[0]?=?lastContext;<br />????????}<br />????}<br /><br />????return?view;<br /><br />}<br />
<br />
View通過(guò)mFactory2、mFactory和mPrivateFactory。建不完,后面等待的就是反思。
前兩個(gè)工廠(chǎng)和支持包一般用于擴展功能,比如TextView->AppCompatTextView。
我們考慮使用 mPrivateFactory。使用mPrivateFactory的好處是,在當前版本中,mPrivateFactory是Activity,所以我們只需要重寫(xiě)Activity的onCreateView即可:
這樣一來(lái),完全不需要hooks,也不會(huì )干擾appcompat相關(guān)的生成邏輯,可謂是零風(fēng)險。
4 開(kāi)始實(shí)施
1.獲取項目中使用的控件名稱(chēng)列表
我新建了一個(gè)工程,在布局文件中寫(xiě)了一些自定義控件,分別叫MyMainView1、MyMainView、MyMainView3、MyMainView4,布局文件就不貼了。
正如我們之前所說(shuō),我們需要在構建apk的過(guò)程中找到一個(gè)合適的注入點(diǎn)來(lái)完成這個(gè)任務(wù)。
那么在apk構建過(guò)程中,什么時(shí)候會(huì )合并資源呢?
我們把構建過(guò)程中的所有任務(wù)打印出來(lái),輸入命令:
./gradlew??app:assembleDebug?--console=plain<br />
<br />
輸出:
>Task?:app:preBuild?UP-TO-DATE<br />>?Task?:app:preDebugBuild?UP-TO-DATE<br />>?Task?:app:checkDebugManifest?UP-TO-DATE<br />>?Task?:app:generateDebugBuildConfig?UP-TO-DATE<br />>?Task?:app:javaPreCompileDebug?UP-TO-DATE<br />>?Task?:app:mainApkListPersistenceDebug?UP-TO-DATE<br />>?Task?:app:generateDebugResValues?UP-TO-DATE<br />>?Task?:app:createDebugCompatibleScreenManifests?UP-TO-DATE<br />>?Task?:app:mergeDebugShaders?UP-TO-DATE<br />>?Task?:app:compileDebugShaders?UP-TO-DATE<br />>?Task?:app:generateDebugAssets?UP-TO-DATE<br />>?Task?:app:compileDebugAidl?NO-SOURCE<br />>?Task?:app:compileDebugRenderscript?NO-SOURCE<br />>?Task?:app:generateDebugResources?UP-TO-DATE<br />>?Task?:app:mergeDebugResources?UP-TO-DATE<br />>?Task?:app:processDebugManifest?UP-TO-DATE<br />>?Task?:app:processDebugResources?UP-TO-DATE<br />>?Task?:app:compileDebugJavaWithJavac?UP-TO-DATE<br />>?Task?:app:compileDebugSources?UP-TO-DATE<br />>?Task?:app:mergeDebugAssets?UP-TO-DATE<br />>?Task?:app:processDebugJavaRes?NO-SOURCE<br />>?Task?:app:mergeDebugJavaResource?UP-TO-DATE<br />>?Task?:app:transformClassesWithDexBuilderForDebug?UP-TO-DATE<br />>?Task?:app:checkDebugDuplicateClasses?UP-TO-DATE<br />>?Task?:app:validateSigningDebug?UP-TO-DATE<br />>?Task?:app:mergeExtDexDebug?UP-TO-DATE<br />>?Task?:app:mergeDexDebug?UP-TO-DATE<br />>?Task?:app:signingConfigWriterDebug?UP-TO-DATE<br />>?Task?:app:mergeDebugJniLibFolders?UP-TO-DATE<br />>?Task?:app:mergeDebugNativeLibs?UP-TO-DATE<br />>?Task?:app:stripDebugDebugSymbols?UP-TO-DATE<br />>?Task?:app:packageDebug?UP-TO-DATE<br />>?Task?:app:assembleDebug?UP-TO-DATE<br />
<br />
哪一個(gè)最像?一看就有一個(gè)Task叫:mergeDebugResources,就是這樣。
對應build目錄,還有一個(gè)mergeDebugResources目錄:
注意里面有一個(gè)merger.xml,里面收錄了整個(gè)項目所有資源的合并內容。
我們打開(kāi)看看:
關(guān)注里面type=layout的相關(guān)標簽。
<br />
<br />
可以看到收錄我們布局文件的路徑,那么我們只需要解析這個(gè)merger.xml,然后在里面找到所有type=layout的標簽,然后解析出布局文件的實(shí)際路徑,然后解析出相應的layout xml來(lái)獲取控件的名稱(chēng)。
對了,這個(gè)任務(wù)需要注入到mergeDebugResources中執行。
如何注入任務(wù)?
很簡(jiǎn)單:
project.afterEvaluate?{<br />????def?mergeDebugResourcesTask?=?project.tasks.findByName("mergeDebugResources")<br />????if?(mergeDebugResourcesTask?!=?null)?{<br />????????def?resParseDebugTask?=?project.tasks.create("ResParseDebugTask",?ResParseTask.class)<br />????????resParseDebugTask.isDebug?=?true<br />????????mergeDebugResourcesTask.finalizedBy(resParseDebugTask);<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
我們首先找到mergeDebugResources任務(wù),然后注入一個(gè)ResParseTask任務(wù)。
然后在ResParseTask中完成文件解析:
<br />
class?ResParseTask?extends?DefaultTask?{<br />????File?viewNameListFile<br />????boolean?isDebug<br />????HashSet?viewSet?=?new?HashSet()<br />????//?自己根據輸出幾個(gè)添加<br />????List?ignoreViewNameList?=?Arrays.asList("include",?"fragment",?"merge",?"view","DateTimeView")<br /><br />????@TaskAction<br />????void?doTask()?{<br /><br />????????File?distDir?=?new?File(project.buildDir,?"tmp_custom_views")<br />????????if?(!distDir.exists())?{<br />????????????distDir.mkdirs()<br />????????}<br />????????viewNameListFile?=?new?File(distDir,?"custom_view_final.txt")<br />????????if?(viewNameListFile.exists())?{<br />????????????viewNameListFile.delete()<br />????????}<br />????????viewNameListFile.createNewFile()<br />????????viewSet.clear()<br />????????viewSet.addAll(ignoreViewNameList)<br /><br />????????try?{<br />????????????File?resMergeFile?=?new?File(project.buildDir,?"/intermediates/incremental/merge"?+?(isDebug???"Debug"?:?"Release")?+?"Resources/merger.xml")<br /><br />????????????println("resMergeFile:${resMergeFile.getAbsolutePath()}?===?${resMergeFile.exists()}")<br /><br />????????????if?(!resMergeFile.exists())?{<br />????????????????return<br />????????????}<br /><br />????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????GPathResult?result?=?slurper.parse(resMergeFile)<br />????????????if?(result.children()?!=?null)?{<br />????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????if?(o?instanceof?Node)?{<br />????????????????????????parseNode(o)<br />????????????????????}<br />????????????????})<br />????????????}<br /><br /><br />????????}?catch?(Throwable?e)?{<br />????????????e.printStackTrace()<br />????????}<br /><br />????}<br /><br />????void?parseNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????if?(node.name()?==?"file"?&&?node.attributes.get("type")?==?"layout")?{<br />????????????String?layoutPath?=?node.attributes.get("path")<br />????????????try?{<br />????????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????????GPathResult?result?=?slurper.parse(layoutPath)<br /><br />????????????????String?viewName?=?result.name();<br />????????????????if?(viewSet.add(viewName))?{<br />????????????????????viewNameListFile.append("${viewName}\n")<br />????????????????}<br />????????????????if?(result.children()?!=?null)?{<br />????????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????????if?(o?instanceof?Node)?{<br />????????????????????????????parseLayoutNode(o)<br />????????????????????????}<br />????????????????????})<br />????????????????}<br />????????????}?catch?(Throwable?e)?{<br />????????????????e.printStackTrace();<br />????????????}<br /><br />????????}?else?{<br />????????????node.childNodes().forEachRemaining({?o?-><br />????????????????if?(o?instanceof?Node)?{<br />????????????????????parseNode(o)<br />????????????????}<br />????????????})<br />????????}<br /><br />????}<br /><br />????void?parseLayoutNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????String?viewName?=?node.name()<br />????????if?(viewSet.add(viewName))?{<br />????????????viewNameListFile.append("${viewName}\n")<br />????????}<br />????????if?(node.childNodes().size()?<br />????????????if?(o?instanceof?Node)?{<br />????????????????parseLayoutNode(o)<br />????????????}<br />????????})<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
代碼很簡(jiǎn)單,主要就是解析merge.xml,找到所有的布局文件,然后解析xml,最后輸出到build目錄。
我們都把代碼寫(xiě)在位于項目根目錄的view_opt.gradle中,應用在app的build.gradle中:
<br />
apply?from:?rootProject.file('view_opt.gradle')<br />
<br />
然后我們再次運行assembleDebug,輸出:

注意上面我們還有一個(gè)ignoreViewNameList對象,我們過(guò)濾了一些特殊的標簽,比如:“include”、“fragment”、“merge”、“view”,你可以根據輸出結果自行添加。
輸出是:
可以看到是去重View的名字。
在這里提一下,很多同學(xué)看到寫(xiě)gradle腳本都會(huì )感到害怕。其實(shí)很簡(jiǎn)單。你可以只寫(xiě)Java。如果不熟悉語(yǔ)法,可以用Java寫(xiě)。沒(méi)有什么特別的。
在這一點(diǎn)上,我們有所有使用的視圖的名稱(chēng)。
2.apt生成代理類(lèi)
有了所有用到的View的名字,然后我們用apt生成一個(gè)代理類(lèi)和代理方法。
要使用 apt,我們需要創(chuàng )建 3 個(gè)新模塊:
ViewOptAnnotation:存儲注解;
ViewOptProcessor:放注解處理器相關(guān)代碼;
ViewOptApi:放相關(guān)API。
關(guān)于A(yíng)pt的基礎知識就不說(shuō)了。這塊知識太復雜了。你可以自己查一下。后面我會(huì )把demo上傳到github,大家自己看看。
直接看我們的核心Processor類(lèi):
<p>@AutoService(Processor.class)<br />public?class?ViewCreatorProcessor?extends?AbstractProcessor?{<br /><br />????private?Messager?mMessager;<br /><br /><br />????@Override<br />????public?synchronized?void?init(ProcessingEnvironment?processingEnvironment)?{<br />????????super.init(processingEnvironment);<br />????????mMessager?=?processingEnv.getMessager();<br />????}<br /><br />????@Override<br />????public?boolean?process(Set
推薦文章:想寫(xiě)一篇高引用的綜述文章?你需要這樣做!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-11-16 12:28
這是社科學(xué)術(shù)圈推送的第2307篇文章文章
打開(kāi)topic-experiment-publishing,每一步都需要閱讀文獻,但是這幾個(gè)步驟的文獻并不全面。從解決一個(gè)問(wèn)題的開(kāi)始到解決一個(gè)問(wèn)題的結束,所有的具體文獻都涉及到。要想全面把握整個(gè)題目的走向,寫(xiě)綜述是非常有必要的。而且,經(jīng)過(guò)長(cháng)時(shí)間的相關(guān)研究,寫(xiě)一篇評論文章有以下好處:
在很大程度上可以提高把握整個(gè)學(xué)科方向的能力。通過(guò)詳細、全面的文獻檢索和閱讀,可以全面掌握和了解本課題的發(fā)展脈絡(luò )、研究進(jìn)展和最新成果。
其次,是對自己作品的總結和升華。經(jīng)過(guò)多年的相關(guān)研究,我心中一定有很多的思考和疑問(wèn)。這時(shí)候,大量的閱讀就是對自己固有知識的一個(gè)歸納升華的過(guò)程。寫(xiě)完應該有頓悟的感覺(jué)。
再次,對以后的實(shí)驗研究具有重要的指導作用。寫(xiě)好review之后,通過(guò)對整個(gè)項目方向的了解,知道哪些問(wèn)題已經(jīng)解決,哪些地方還存在問(wèn)題,哪些問(wèn)題是熱點(diǎn)問(wèn)題,哪些是難點(diǎn)骨頭,是制約項目發(fā)展的關(guān)鍵. 這樣,就可以有針對性地設計以后的實(shí)驗。
在小的方面,評論也是一個(gè)文章?,F在國內的評價(jià)都是看個(gè)人成績(jì),總結也是一種發(fā)表文章的方式。另一方面,你可以提高你在同齡人中的地位。一般來(lái)說(shuō),評論 文章 比研究 文章 有更多的引用,從而提高了它們在同行中的知名度。
《文獻檢索準備工作》
在開(kāi)始寫(xiě)評論之前,一個(gè)重要的準備工作就是文獻檢索。審查文章 需要全面,并且必須綜合審查中審查的問(wèn)題。因此,有必要進(jìn)行詳盡的文獻檢索。
這里說(shuō)的全面,并不是說(shuō)下載閱讀幾十年的所有文章。這將是太多的工作。這是一。第二,早期的文章可能已經(jīng)總結過(guò)了。因此,只需尋找一些綜述 文章。這里的綜合指的是更多的關(guān)鍵詞搜索和更多的數據庫搜索。先說(shuō)關(guān)鍵詞,每個(gè)作者對關(guān)鍵詞的偏好不同,在新興領(lǐng)域沒(méi)有統一術(shù)語(yǔ)的時(shí)候,多改幾個(gè)關(guān)鍵詞是很有必要的。除了數據庫,由于各個(gè)數據庫收錄的期刊并不全面,所以重要的搜索工具在這里必不可少。
獲取相關(guān)文獻還有兩個(gè)技巧。一個(gè)是我讀過(guò)的文章中引用的文獻。這個(gè)很容易理解,文末的參考資料就是這樣。另外就是看哪個(gè)文章引用了你讀過(guò)的文章,也是相關(guān)文獻。例如,谷歌學(xué)術(shù)有一個(gè)引用計數,你可以通過(guò)點(diǎn)擊查看哪些文章引用了這篇文章文章。
通過(guò)以上幾種方法,才能找到所有相關(guān)文獻。
“大量閱讀以備不時(shí)之需”
找到所有的文獻之后,下一步就是開(kāi)始閱讀了。
首先,沒(méi)必要全部看完,時(shí)間太長(cháng),工作量太大。但是,應該通讀最近兩年的文章。兩年是對一個(gè)相對熱門(mén)的領(lǐng)域進(jìn)行全面概述 文章 的合理時(shí)間點(diǎn)。近兩年的文章要通讀重點(diǎn),這也是復習的重點(diǎn)。不通讀就知道解決了什么問(wèn)題,如何解決是不夠的;沒(méi)看完就寫(xiě)點(diǎn)評有點(diǎn)不負責任。
兩年前的文章完全沒(méi)必要看,因為你可以從這兩年的文章里的序言里看對這些文章的評論,就可以了也看了評論文章獲取相關(guān)信息。這些文章可以重點(diǎn)閱讀摘要,也有針對某個(gè)問(wèn)題的針對性閱讀。
“如何閱讀文件”
閱讀數百份文件并非易事。如果你只是瀏覽它們,你只能留下一個(gè)大概的印象。一段時(shí)間后或者隨著(zhù)閱讀文檔的增多,這種模糊的印象也會(huì )消失。知識點(diǎn)的記憶是寫(xiě)作和創(chuàng )作的基礎。我不記得如何組織語(yǔ)言。就算查了,也不知道從幾百份文件,幾千頁(yè)里查到哪里去。
我的導師教我要辯證地看書(shū),邊想邊記,不能在書(shū)上亂寫(xiě)。對我來(lái)說(shuō),“好記性不如爛筆頭”更適合我,也適合我的德國同事。他們將文件打印在A(yíng)4紙上,并用熒光筆標出重要的句子??赐旰?,抄寫(xiě)在A(yíng)5紙上,作為選集書(shū)到原稿上。摘錄的才是真正對你有用的知識點(diǎn)。大多數其他 文章 都是伏筆,或者已經(jīng)在你的記憶中?!皠澲攸c(diǎn)+讀書(shū)筆記”可以有效幫助記憶。
雖然一開(kāi)始這樣看很慢,但是隨著(zhù)文檔寫(xiě)了十多二十篇,積累多了,后面的摘錄就會(huì )越來(lái)越少。還有,你的閱讀速度越來(lái)越快。
《文件管理》
下載數百個(gè)文檔后,文檔流水線(xiàn)就成了問(wèn)題。對于文獻管理,Endnote就是這樣一個(gè)專(zhuān)業(yè),它可以有效地組織龐大的文獻,并為您提供全面的信息,如作者、期刊、年份、標題、卷頁(yè)碼和摘要。有些期刊在投稿的時(shí)候需要DOI,Endnote也可以。Endnote在文章的編排中起著(zhù)巨大的作用,是寫(xiě)評論、寫(xiě)論文、寫(xiě)書(shū)的必備工具。
雖然電子版很方便,但我還是更喜歡看紙質(zhì)版。我喜歡把文件打印出來(lái),統一編號(和Endnote一致,Endnote中的Label可以加編號),打孔,放在活頁(yè)夾里。
“文章 的架構”
文學(xué)閱讀是一個(gè)從“說(shuō)得過(guò)去”、“說(shuō)得過(guò)去”、“大是大非”到“無(wú)事生非”的過(guò)程。
我剛開(kāi)始讀書(shū)。由于本人知識有限,之前文章提出的方法和結果對我來(lái)說(shuō)都是全新的,我的知識儲備不足以判斷觀(guān)點(diǎn)。因此,當你剛開(kāi)始閱讀時(shí),你會(huì )完全接受文章中的所有內容,很難提出有問(wèn)題的觀(guān)點(diǎn),你閱讀的任何內容都是“有理有據”的??戳耸似恼?,明白了更多的方法和觀(guān)點(diǎn),有些可能會(huì )有不同的看法。這是因為疑惑會(huì )跳出來(lái),我會(huì )挑剔我讀到的論據,但我不能僅僅依靠一兩篇文章文章就斷定一種方法完全優(yōu)于另一種方法。每種方法都有其優(yōu)缺點(diǎn),從而達到“似是而非”的境界。只有看到足夠多的文章才能做出完整的評價(jià),得到的對比結果也有足夠的論據。這時(shí),已經(jīng)達到了“大是大非”的境界。
一篇評論文章,一部分是綜合別人的作品,一部分是討論自己的觀(guān)點(diǎn)。大是大非只是全面的一步,還應該更進(jìn)一步。通過(guò)對“大是大非”的把握,要能夠發(fā)現新問(wèn)題、新優(yōu)勢或劣勢,提出改進(jìn)方法,對今后的工作和發(fā)展前景提出建議和設想。更有什者,跳出對原實(shí)驗細枝末節的討論,從更高的層次,從原理、方法和系統上進(jìn)行評價(jià)。這當然是非常困難的。所以,大部分的總結文章都是總結而不總結,以至于讀者看完后對過(guò)去有所了解,但對未來(lái)還是茫然無(wú)措。當然,
如果看完之后能做到“大是大非”的經(jīng)濟,就可以開(kāi)始寫(xiě)作了。寫(xiě)作時(shí),首先要搭建一個(gè)框架,對要概括的內容進(jìn)行分類(lèi)、細分。分得越細越好,至少三級,三級標題下可能還有四五級標題。這樣做有以下好處:
@frame 要審查并縮小范圍的問(wèn)題。不要讓你的寫(xiě)作“隨心所欲”,偏離了方向,失去了重心。也容易分清主次,而不是抓眉毛胡子。這不是在寫(xiě)一本書(shū),沒(méi)有太多的空間來(lái)全面討論,所以限制你的評論范圍。
@寫(xiě)作壓力小。一想到寫(xiě)文章文章,就想到“至少寫(xiě)5000字,看100篇文檔”,瞬間壓力倍增,不知從何下手。細分之后,你需要考慮的就是討論某個(gè)方法的某個(gè)參數,只需要一小段文字。它非常容易,可以立即完成,沒(méi)有太大的壓力。
@有順序地。所有要討論的問(wèn)題都列在那里,就像一個(gè)TO-DO LIST,完成一項劃掉一項,一項一項,有條不紊,進(jìn)度非常直觀(guān)。
《寫(xiě)作的小細節》
文章細分成小節后,就可以開(kāi)始完成每個(gè)小節了。下面介紹幾個(gè)非常有效的小技巧。
@注意寫(xiě)作的連貫性:最好一口氣寫(xiě)完,寫(xiě)A的時(shí)候不要想著(zhù)B。這里有兩個(gè)意思。寫(xiě)A題時(shí),找到B題有用的材料;另一個(gè)意思是你在寫(xiě)A題的時(shí)候發(fā)現了B題的錯誤、遺漏或者其他問(wèn)題。這時(shí)候不要停下來(lái),直接用便利貼做筆記(我習慣用ONENOTE做筆記采集材料)。做完筆記,繼續寫(xiě)A題,直到寫(xiě)完。我們回過(guò)頭來(lái)梳理B題。
@二手文獻:為了證明一個(gè)結論,可能需要引用文章主題之外的文獻,或者需要從文獻中引用的文獻中尋找證據,這稱(chēng)為二手文獻。文獻中被他人引用的數據一定要核對,避免錯引文獻、錯引數據。
@圖片處理:一個(gè)是圖片的版權問(wèn)題,這個(gè)不用擔心。當你投稿給期刊時(shí),期刊的編輯會(huì )處理;二是畫(huà)質(zhì)。從其他文檔中提取圖片時(shí),不要使用截圖,因為圖片的分辨率不夠。PDF文件要用PHOTOSHOP打開(kāi),裁剪出需要的圖片,然后保存為T(mén)IFF/JPEG格式。PPT中繪制的圖片,不要使用PPT的“圖片另存為”功能,分辨率太弱。應該說(shuō)是把PPT保存成PDF,然后用PHOTOSHOP處理。
@references 的修改。前期寫(xiě)作時(shí),必須用ENDNOTE對插入WORD的文檔進(jìn)行索引。如果文章已經(jīng)形成,則ENDNOTE已經(jīng)導出了參考文獻,其他作者修改后,需要增刪參考文獻。添加或刪除文檔將更改其他文檔的索引號。這時(shí)候很容易出錯。我用的是下面的方法:在每個(gè)要更改的文檔的索引中加上“*”;在“*”后添加新的參考索引號;使用搜索功能確認每一個(gè)需要改的文檔都用“*”連接(應該出現兩次,比如添加引用121、122應該有兩個(gè),121*122、122*123,即121變成 122,122 變成 123);刪除“*”和之前的索引號。
@英語(yǔ)句子,短句勝于長(cháng)句。被人理解才是最重要的。簡(jiǎn)短的句子很容易理解。太多的定語(yǔ)從句會(huì )讓人頭暈目眩。
“文章 的亮點(diǎn)”
一篇文章文章必須要有一些“干貨”,才能被更多人引用。所以在你寫(xiě)之前,看看你下載的 文章 的引用。哪個(gè) 文章 獲得了最多的引用?為什么?
從我個(gè)人引用文章的習慣來(lái)看,下面的文章會(huì )被引用:
@第一篇文章:該領(lǐng)域的開(kāi)創(chuàng )性工作,不引用是不合理的;
@milestone文章:文章達到最高、最高、最大、最快等,或者突出的進(jìn)步,應該注明;
@正在討論核心問(wèn)題。
另外,我也喜歡引用結論性的句子,比如某項技術(shù)的優(yōu)點(diǎn)……;以及量化的句子,比如70%的文章目前都采用了某種方法。
如果你能在你的評論中提供這些內容,那肯定會(huì )增加其他引用的數量。前三個(gè)干貨是研究型文章的東西,后兩個(gè)就不簡(jiǎn)單了。第一個(gè)需要你自己總結,第二個(gè)需要大量的統計。
分享文章:文章偽原創(chuàng )檢查(在線(xiàn)文章偽原創(chuàng ))
本文閱讀提示:在線(xiàn)文章偽原創(chuàng ),文章偽原創(chuàng )軟件移動(dòng)版,文章采集偽原創(chuàng )
文章偽原創(chuàng )檢查工具在線(xiàn) zoding(文章偽原創(chuàng )),4 個(gè)經(jīng)典 SEO 偽原創(chuàng )|谷歌搜索引擎:pR劫持,5個(gè)常規工件
網(wǎng)站共同點(diǎn)和偽原創(chuàng )是SEO偽項目,1支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),2并支持多種快速替換的SEO偽原創(chuàng )
搜索引擎優(yōu)化
偽原創(chuàng )檢測工具偽原創(chuàng ),3并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),1支持圖文組合的快速偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,1支持圖文組合的多版本偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,2支持重大修改
SEO偽原創(chuàng ),3大偽原創(chuàng )成本測試
SEO偽原創(chuàng )文章工具,1個(gè)搜索引擎與文章庫集成
SEO 偽原創(chuàng )文章工具,1 個(gè)集成關(guān)鍵詞
SEO偽原創(chuàng )文章工具,1個(gè)集成關(guān)鍵詞,搜索量關(guān)鍵詞
SEO偽原創(chuàng )文章工具,2密度的組織關(guān)鍵詞
SEO偽原創(chuàng )文章工具,3.優(yōu)化網(wǎng)站內部鏈
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化:平面結構。輔助導航。痕跡導航。子導航。野外站。特殊優(yōu)化2.內容頁(yè)面優(yōu)化:(優(yōu)化最新文章。推薦文章。熱門(mén)文章 3頁(yè)面加載速度(秒) 4.頁(yè)面代碼壓縮和簡(jiǎn)化
SEO偽原創(chuàng )文章工具,2個(gè)面包屑來(lái)指導頁(yè)面。 301重定向第五代。圖像標簽 6.網(wǎng)站 TDK寫(xiě)作 7.關(guān)鍵詞密度控制8.在單詞標簽周?chē)褂藐P(guān)鍵字 9.粗體關(guān)鍵字等 10.合理使用NO11。分頁(yè)代碼優(yōu)化SEO 偽原創(chuàng )文章工具
、3SEO 偽原創(chuàng )文章工具站點(diǎn)地圖設置
SEO 偽原創(chuàng )文章工具,1 網(wǎng)站結構優(yōu)化 2.網(wǎng)站地圖優(yōu)化提交。主動(dòng)推送。自動(dòng)推送)。
SEO偽原創(chuàng )文章工具,4個(gè)優(yōu)化的關(guān)鍵詞布局
SEO偽原創(chuàng )文章工具,1選擇和識別核心關(guān)鍵詞。長(cháng)尾關(guān)鍵詞延伸。關(guān)鍵詞工具詞挖掘研究。競爭對手網(wǎng)站關(guān)鍵詞分享研究成果
搜索引擎優(yōu)化偽原創(chuàng )文章工具,
相關(guān)文章 查看全部
推薦文章:想寫(xiě)一篇高引用的綜述文章?你需要這樣做!
這是社科學(xué)術(shù)圈推送的第2307篇文章文章
打開(kāi)topic-experiment-publishing,每一步都需要閱讀文獻,但是這幾個(gè)步驟的文獻并不全面。從解決一個(gè)問(wèn)題的開(kāi)始到解決一個(gè)問(wèn)題的結束,所有的具體文獻都涉及到。要想全面把握整個(gè)題目的走向,寫(xiě)綜述是非常有必要的。而且,經(jīng)過(guò)長(cháng)時(shí)間的相關(guān)研究,寫(xiě)一篇評論文章有以下好處:
在很大程度上可以提高把握整個(gè)學(xué)科方向的能力。通過(guò)詳細、全面的文獻檢索和閱讀,可以全面掌握和了解本課題的發(fā)展脈絡(luò )、研究進(jìn)展和最新成果。
其次,是對自己作品的總結和升華。經(jīng)過(guò)多年的相關(guān)研究,我心中一定有很多的思考和疑問(wèn)。這時(shí)候,大量的閱讀就是對自己固有知識的一個(gè)歸納升華的過(guò)程。寫(xiě)完應該有頓悟的感覺(jué)。
再次,對以后的實(shí)驗研究具有重要的指導作用。寫(xiě)好review之后,通過(guò)對整個(gè)項目方向的了解,知道哪些問(wèn)題已經(jīng)解決,哪些地方還存在問(wèn)題,哪些問(wèn)題是熱點(diǎn)問(wèn)題,哪些是難點(diǎn)骨頭,是制約項目發(fā)展的關(guān)鍵. 這樣,就可以有針對性地設計以后的實(shí)驗。
在小的方面,評論也是一個(gè)文章?,F在國內的評價(jià)都是看個(gè)人成績(jì),總結也是一種發(fā)表文章的方式。另一方面,你可以提高你在同齡人中的地位。一般來(lái)說(shuō),評論 文章 比研究 文章 有更多的引用,從而提高了它們在同行中的知名度。
《文獻檢索準備工作》
在開(kāi)始寫(xiě)評論之前,一個(gè)重要的準備工作就是文獻檢索。審查文章 需要全面,并且必須綜合審查中審查的問(wèn)題。因此,有必要進(jìn)行詳盡的文獻檢索。
這里說(shuō)的全面,并不是說(shuō)下載閱讀幾十年的所有文章。這將是太多的工作。這是一。第二,早期的文章可能已經(jīng)總結過(guò)了。因此,只需尋找一些綜述 文章。這里的綜合指的是更多的關(guān)鍵詞搜索和更多的數據庫搜索。先說(shuō)關(guān)鍵詞,每個(gè)作者對關(guān)鍵詞的偏好不同,在新興領(lǐng)域沒(méi)有統一術(shù)語(yǔ)的時(shí)候,多改幾個(gè)關(guān)鍵詞是很有必要的。除了數據庫,由于各個(gè)數據庫收錄的期刊并不全面,所以重要的搜索工具在這里必不可少。
獲取相關(guān)文獻還有兩個(gè)技巧。一個(gè)是我讀過(guò)的文章中引用的文獻。這個(gè)很容易理解,文末的參考資料就是這樣。另外就是看哪個(gè)文章引用了你讀過(guò)的文章,也是相關(guān)文獻。例如,谷歌學(xué)術(shù)有一個(gè)引用計數,你可以通過(guò)點(diǎn)擊查看哪些文章引用了這篇文章文章。
通過(guò)以上幾種方法,才能找到所有相關(guān)文獻。
“大量閱讀以備不時(shí)之需”
找到所有的文獻之后,下一步就是開(kāi)始閱讀了。
首先,沒(méi)必要全部看完,時(shí)間太長(cháng),工作量太大。但是,應該通讀最近兩年的文章。兩年是對一個(gè)相對熱門(mén)的領(lǐng)域進(jìn)行全面概述 文章 的合理時(shí)間點(diǎn)。近兩年的文章要通讀重點(diǎn),這也是復習的重點(diǎn)。不通讀就知道解決了什么問(wèn)題,如何解決是不夠的;沒(méi)看完就寫(xiě)點(diǎn)評有點(diǎn)不負責任。

兩年前的文章完全沒(méi)必要看,因為你可以從這兩年的文章里的序言里看對這些文章的評論,就可以了也看了評論文章獲取相關(guān)信息。這些文章可以重點(diǎn)閱讀摘要,也有針對某個(gè)問(wèn)題的針對性閱讀。
“如何閱讀文件”
閱讀數百份文件并非易事。如果你只是瀏覽它們,你只能留下一個(gè)大概的印象。一段時(shí)間后或者隨著(zhù)閱讀文檔的增多,這種模糊的印象也會(huì )消失。知識點(diǎn)的記憶是寫(xiě)作和創(chuàng )作的基礎。我不記得如何組織語(yǔ)言。就算查了,也不知道從幾百份文件,幾千頁(yè)里查到哪里去。
我的導師教我要辯證地看書(shū),邊想邊記,不能在書(shū)上亂寫(xiě)。對我來(lái)說(shuō),“好記性不如爛筆頭”更適合我,也適合我的德國同事。他們將文件打印在A(yíng)4紙上,并用熒光筆標出重要的句子??赐旰?,抄寫(xiě)在A(yíng)5紙上,作為選集書(shū)到原稿上。摘錄的才是真正對你有用的知識點(diǎn)。大多數其他 文章 都是伏筆,或者已經(jīng)在你的記憶中?!皠澲攸c(diǎn)+讀書(shū)筆記”可以有效幫助記憶。
雖然一開(kāi)始這樣看很慢,但是隨著(zhù)文檔寫(xiě)了十多二十篇,積累多了,后面的摘錄就會(huì )越來(lái)越少。還有,你的閱讀速度越來(lái)越快。
《文件管理》
下載數百個(gè)文檔后,文檔流水線(xiàn)就成了問(wèn)題。對于文獻管理,Endnote就是這樣一個(gè)專(zhuān)業(yè),它可以有效地組織龐大的文獻,并為您提供全面的信息,如作者、期刊、年份、標題、卷頁(yè)碼和摘要。有些期刊在投稿的時(shí)候需要DOI,Endnote也可以。Endnote在文章的編排中起著(zhù)巨大的作用,是寫(xiě)評論、寫(xiě)論文、寫(xiě)書(shū)的必備工具。
雖然電子版很方便,但我還是更喜歡看紙質(zhì)版。我喜歡把文件打印出來(lái),統一編號(和Endnote一致,Endnote中的Label可以加編號),打孔,放在活頁(yè)夾里。
“文章 的架構”
文學(xué)閱讀是一個(gè)從“說(shuō)得過(guò)去”、“說(shuō)得過(guò)去”、“大是大非”到“無(wú)事生非”的過(guò)程。
我剛開(kāi)始讀書(shū)。由于本人知識有限,之前文章提出的方法和結果對我來(lái)說(shuō)都是全新的,我的知識儲備不足以判斷觀(guān)點(diǎn)。因此,當你剛開(kāi)始閱讀時(shí),你會(huì )完全接受文章中的所有內容,很難提出有問(wèn)題的觀(guān)點(diǎn),你閱讀的任何內容都是“有理有據”的??戳耸似恼?,明白了更多的方法和觀(guān)點(diǎn),有些可能會(huì )有不同的看法。這是因為疑惑會(huì )跳出來(lái),我會(huì )挑剔我讀到的論據,但我不能僅僅依靠一兩篇文章文章就斷定一種方法完全優(yōu)于另一種方法。每種方法都有其優(yōu)缺點(diǎn),從而達到“似是而非”的境界。只有看到足夠多的文章才能做出完整的評價(jià),得到的對比結果也有足夠的論據。這時(shí),已經(jīng)達到了“大是大非”的境界。
一篇評論文章,一部分是綜合別人的作品,一部分是討論自己的觀(guān)點(diǎn)。大是大非只是全面的一步,還應該更進(jìn)一步。通過(guò)對“大是大非”的把握,要能夠發(fā)現新問(wèn)題、新優(yōu)勢或劣勢,提出改進(jìn)方法,對今后的工作和發(fā)展前景提出建議和設想。更有什者,跳出對原實(shí)驗細枝末節的討論,從更高的層次,從原理、方法和系統上進(jìn)行評價(jià)。這當然是非常困難的。所以,大部分的總結文章都是總結而不總結,以至于讀者看完后對過(guò)去有所了解,但對未來(lái)還是茫然無(wú)措。當然,
如果看完之后能做到“大是大非”的經(jīng)濟,就可以開(kāi)始寫(xiě)作了。寫(xiě)作時(shí),首先要搭建一個(gè)框架,對要概括的內容進(jìn)行分類(lèi)、細分。分得越細越好,至少三級,三級標題下可能還有四五級標題。這樣做有以下好處:
@frame 要審查并縮小范圍的問(wèn)題。不要讓你的寫(xiě)作“隨心所欲”,偏離了方向,失去了重心。也容易分清主次,而不是抓眉毛胡子。這不是在寫(xiě)一本書(shū),沒(méi)有太多的空間來(lái)全面討論,所以限制你的評論范圍。
@寫(xiě)作壓力小。一想到寫(xiě)文章文章,就想到“至少寫(xiě)5000字,看100篇文檔”,瞬間壓力倍增,不知從何下手。細分之后,你需要考慮的就是討論某個(gè)方法的某個(gè)參數,只需要一小段文字。它非常容易,可以立即完成,沒(méi)有太大的壓力。
@有順序地。所有要討論的問(wèn)題都列在那里,就像一個(gè)TO-DO LIST,完成一項劃掉一項,一項一項,有條不紊,進(jìn)度非常直觀(guān)。

《寫(xiě)作的小細節》
文章細分成小節后,就可以開(kāi)始完成每個(gè)小節了。下面介紹幾個(gè)非常有效的小技巧。
@注意寫(xiě)作的連貫性:最好一口氣寫(xiě)完,寫(xiě)A的時(shí)候不要想著(zhù)B。這里有兩個(gè)意思。寫(xiě)A題時(shí),找到B題有用的材料;另一個(gè)意思是你在寫(xiě)A題的時(shí)候發(fā)現了B題的錯誤、遺漏或者其他問(wèn)題。這時(shí)候不要停下來(lái),直接用便利貼做筆記(我習慣用ONENOTE做筆記采集材料)。做完筆記,繼續寫(xiě)A題,直到寫(xiě)完。我們回過(guò)頭來(lái)梳理B題。
@二手文獻:為了證明一個(gè)結論,可能需要引用文章主題之外的文獻,或者需要從文獻中引用的文獻中尋找證據,這稱(chēng)為二手文獻。文獻中被他人引用的數據一定要核對,避免錯引文獻、錯引數據。
@圖片處理:一個(gè)是圖片的版權問(wèn)題,這個(gè)不用擔心。當你投稿給期刊時(shí),期刊的編輯會(huì )處理;二是畫(huà)質(zhì)。從其他文檔中提取圖片時(shí),不要使用截圖,因為圖片的分辨率不夠。PDF文件要用PHOTOSHOP打開(kāi),裁剪出需要的圖片,然后保存為T(mén)IFF/JPEG格式。PPT中繪制的圖片,不要使用PPT的“圖片另存為”功能,分辨率太弱。應該說(shuō)是把PPT保存成PDF,然后用PHOTOSHOP處理。
@references 的修改。前期寫(xiě)作時(shí),必須用ENDNOTE對插入WORD的文檔進(jìn)行索引。如果文章已經(jīng)形成,則ENDNOTE已經(jīng)導出了參考文獻,其他作者修改后,需要增刪參考文獻。添加或刪除文檔將更改其他文檔的索引號。這時(shí)候很容易出錯。我用的是下面的方法:在每個(gè)要更改的文檔的索引中加上“*”;在“*”后添加新的參考索引號;使用搜索功能確認每一個(gè)需要改的文檔都用“*”連接(應該出現兩次,比如添加引用121、122應該有兩個(gè),121*122、122*123,即121變成 122,122 變成 123);刪除“*”和之前的索引號。
@英語(yǔ)句子,短句勝于長(cháng)句。被人理解才是最重要的。簡(jiǎn)短的句子很容易理解。太多的定語(yǔ)從句會(huì )讓人頭暈目眩。
“文章 的亮點(diǎn)”
一篇文章文章必須要有一些“干貨”,才能被更多人引用。所以在你寫(xiě)之前,看看你下載的 文章 的引用。哪個(gè) 文章 獲得了最多的引用?為什么?
從我個(gè)人引用文章的習慣來(lái)看,下面的文章會(huì )被引用:
@第一篇文章:該領(lǐng)域的開(kāi)創(chuàng )性工作,不引用是不合理的;
@milestone文章:文章達到最高、最高、最大、最快等,或者突出的進(jìn)步,應該注明;
@正在討論核心問(wèn)題。
另外,我也喜歡引用結論性的句子,比如某項技術(shù)的優(yōu)點(diǎn)……;以及量化的句子,比如70%的文章目前都采用了某種方法。
如果你能在你的評論中提供這些內容,那肯定會(huì )增加其他引用的數量。前三個(gè)干貨是研究型文章的東西,后兩個(gè)就不簡(jiǎn)單了。第一個(gè)需要你自己總結,第二個(gè)需要大量的統計。
分享文章:文章偽原創(chuàng )檢查(在線(xiàn)文章偽原創(chuàng ))
本文閱讀提示:在線(xiàn)文章偽原創(chuàng ),文章偽原創(chuàng )軟件移動(dòng)版,文章采集偽原創(chuàng )
文章偽原創(chuàng )檢查工具在線(xiàn) zoding(文章偽原創(chuàng )),4 個(gè)經(jīng)典 SEO 偽原創(chuàng )|谷歌搜索引擎:pR劫持,5個(gè)常規工件
網(wǎng)站共同點(diǎn)和偽原創(chuàng )是SEO偽項目,1支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),2并支持多種快速替換的SEO偽原創(chuàng )
搜索引擎優(yōu)化
偽原創(chuàng )檢測工具偽原創(chuàng ),3并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),1支持圖文組合的快速偽原創(chuàng )

SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,1支持圖文組合的多版本偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,2支持重大修改
SEO偽原創(chuàng ),3大偽原創(chuàng )成本測試
SEO偽原創(chuàng )文章工具,1個(gè)搜索引擎與文章庫集成
SEO 偽原創(chuàng )文章工具,1 個(gè)集成關(guān)鍵詞
SEO偽原創(chuàng )文章工具,1個(gè)集成關(guān)鍵詞,搜索量關(guān)鍵詞
SEO偽原創(chuàng )文章工具,2密度的組織關(guān)鍵詞
SEO偽原創(chuàng )文章工具,3.優(yōu)化網(wǎng)站內部鏈

SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化:平面結構。輔助導航。痕跡導航。子導航。野外站。特殊優(yōu)化2.內容頁(yè)面優(yōu)化:(優(yōu)化最新文章。推薦文章。熱門(mén)文章 3頁(yè)面加載速度(秒) 4.頁(yè)面代碼壓縮和簡(jiǎn)化
SEO偽原創(chuàng )文章工具,2個(gè)面包屑來(lái)指導頁(yè)面。 301重定向第五代。圖像標簽 6.網(wǎng)站 TDK寫(xiě)作 7.關(guān)鍵詞密度控制8.在單詞標簽周?chē)褂藐P(guān)鍵字 9.粗體關(guān)鍵字等 10.合理使用NO11。分頁(yè)代碼優(yōu)化SEO 偽原創(chuàng )文章工具
、3SEO 偽原創(chuàng )文章工具站點(diǎn)地圖設置
SEO 偽原創(chuàng )文章工具,1 網(wǎng)站結構優(yōu)化 2.網(wǎng)站地圖優(yōu)化提交。主動(dòng)推送。自動(dòng)推送)。
SEO偽原創(chuàng )文章工具,4個(gè)優(yōu)化的關(guān)鍵詞布局
SEO偽原創(chuàng )文章工具,1選擇和識別核心關(guān)鍵詞。長(cháng)尾關(guān)鍵詞延伸。關(guān)鍵詞工具詞挖掘研究。競爭對手網(wǎng)站關(guān)鍵詞分享研究成果
搜索引擎優(yōu)化偽原創(chuàng )文章工具,
相關(guān)文章
解讀:【精選小說(shuō)】文章采集調用bing程序的作用呢?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 128 次瀏覽 ? 2022-11-28 15:32
文章采集調用bing爬蟲(chóng)程序的方法,直接用爬蟲(chóng)就能采集大量數據,但是bing爬蟲(chóng)對我們來(lái)說(shuō)又有什么作用呢?bing云采集網(wǎng)站抓取的頁(yè)面標題,地址和數據應該是一個(gè)獨立的頁(yè)面嗎?應該獨立在某個(gè)頁(yè)面上嗎?要達到什么效果?可以調用嗎?公眾號查詢(xún)【精選小說(shuō)】文章采集使用sublime安裝pythonsublime有windows版,需要一個(gè)安裝visualstudiocode的編輯器。
使用pythonsublime怎么采集bing云采集結果地址對應的云采集地址可以調用嗎?可以調用的方法就是chrome云采集selenium+pyseleniumwindows版chrome采集用pyselenium之前需要編寫(xiě)一段腳本,用它運行腳本,然后在bing頁(yè)面上隨機輸入地址,是沒(méi)有數據的。pythonsublime插件,需要編寫(xiě)代碼如果開(kāi)發(fā)團隊有開(kāi)發(fā)的python的項目,為了盡快在pythonsublime的工作環(huán)境中測試腳本,可以將腳本寫(xiě)成c和c++,ruby等語(yǔ)言編寫(xiě)。
這個(gè)項目叫做pythonwebdriver的selenium,用于windows,linux和mac桌面環(huán)境下開(kāi)發(fā)爬蟲(chóng)程序??梢宰孕邪俣炔榭碿hromecss開(kāi)發(fā)社區??梢詫胂螺d的js文件,此外還需要安裝下載助手。在項目目錄下,會(huì )發(fā)現出現一個(gè)chrome/webdriver.swig。解壓??匆幌略创a:腳本在解壓后目錄中應該有一個(gè).py。
內置的爬蟲(chóng)程序。下載:百度云下載幫助文件,用next找到要下載的文件,然后copy。一般我這邊下載是128m這個(gè)大小。右鍵點(diǎn)擊以管理員身份運行,選擇copymetadata到,復制源碼粘貼到運行中,測試。運行成功之后,就生成了一個(gè)文件,具體如下:運行成功之后,查看項目目錄下生成的文件,沒(méi)看到.py,而看到的是這樣的:現在我們先在另一臺電腦上安裝bing,在安裝bing之前,需要添加環(huán)境變量。
添加到visualstudiocode的extensions的plugins文件夾中。path中加入;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%。 查看全部
解讀:【精選小說(shuō)】文章采集調用bing程序的作用呢?
文章采集調用bing爬蟲(chóng)程序的方法,直接用爬蟲(chóng)就能采集大量數據,但是bing爬蟲(chóng)對我們來(lái)說(shuō)又有什么作用呢?bing云采集網(wǎng)站抓取的頁(yè)面標題,地址和數據應該是一個(gè)獨立的頁(yè)面嗎?應該獨立在某個(gè)頁(yè)面上嗎?要達到什么效果?可以調用嗎?公眾號查詢(xún)【精選小說(shuō)】文章采集使用sublime安裝pythonsublime有windows版,需要一個(gè)安裝visualstudiocode的編輯器。

使用pythonsublime怎么采集bing云采集結果地址對應的云采集地址可以調用嗎?可以調用的方法就是chrome云采集selenium+pyseleniumwindows版chrome采集用pyselenium之前需要編寫(xiě)一段腳本,用它運行腳本,然后在bing頁(yè)面上隨機輸入地址,是沒(méi)有數據的。pythonsublime插件,需要編寫(xiě)代碼如果開(kāi)發(fā)團隊有開(kāi)發(fā)的python的項目,為了盡快在pythonsublime的工作環(huán)境中測試腳本,可以將腳本寫(xiě)成c和c++,ruby等語(yǔ)言編寫(xiě)。
這個(gè)項目叫做pythonwebdriver的selenium,用于windows,linux和mac桌面環(huán)境下開(kāi)發(fā)爬蟲(chóng)程序??梢宰孕邪俣炔榭碿hromecss開(kāi)發(fā)社區??梢詫胂螺d的js文件,此外還需要安裝下載助手。在項目目錄下,會(huì )發(fā)現出現一個(gè)chrome/webdriver.swig。解壓??匆幌略创a:腳本在解壓后目錄中應該有一個(gè).py。

內置的爬蟲(chóng)程序。下載:百度云下載幫助文件,用next找到要下載的文件,然后copy。一般我這邊下載是128m這個(gè)大小。右鍵點(diǎn)擊以管理員身份運行,選擇copymetadata到,復制源碼粘貼到運行中,測試。運行成功之后,就生成了一個(gè)文件,具體如下:運行成功之后,查看項目目錄下生成的文件,沒(méi)看到.py,而看到的是這樣的:現在我們先在另一臺電腦上安裝bing,在安裝bing之前,需要添加環(huán)境變量。
添加到visualstudiocode的extensions的plugins文件夾中。path中加入;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%;%path%%。
解決方案:web開(kāi)發(fā)中如何快速開(kāi)發(fā)標準?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-11-28 12:25
文章采集調用百度收錄-提取請求參數getheaderbyormer提取關(guān)鍵字直接編譯下getheaderbyormer成java腳本,生成jar然后調用即可先直接在http請求的getheaderbyformer用-g打開(kāi)獲取到的參數xml然后使用java反射最終構造出java類(lèi)作為參數提交到web頁(yè)面中開(kāi)發(fā)還是maven比較方便可以管理版本和依賴(lài)項,發(fā)布到服務(wù)器,更方便代碼更穩定。
樓上建議maven的非常對,但是我覺(jué)得你還需要了解一個(gè)東西,就是spring整個(gè)的生態(tài)圈,如果使用的netty,那么我覺(jué)得你可以參考maven來(lái)實(shí)現,他不是唯一的做事情的方式,但是做web開(kāi)發(fā),用maven肯定不是最佳方式,沒(méi)有看到過(guò)用jpa的,畢竟web開(kāi)發(fā)的難度還是比較大的。我個(gè)人覺(jué)得spring使用用,相比jpa而言做開(kāi)發(fā)難度就降低不少。
如果要更快速的話(huà)我建議使用ejb標準,現在ejb泛濫,效率極其低,企業(yè)環(huán)境下不常用,也很難改。企業(yè)環(huán)境是一個(gè)復雜度很高的問(wèn)題,往往涉及到架構本身的設計,系統的性能優(yōu)化,業(yè)務(wù)復雜度,單體環(huán)境對網(wǎng)絡(luò )和硬件的要求,權限劃分,數據庫同步等問(wèn)題。而spring讓這些復雜的內容成為可能,但是真正想要快速開(kāi)發(fā),還是推薦maven,要不然又是spring的一堆坑。
對于如何快速,我可以給出一個(gè)看起來(lái)比較容易實(shí)現的方法:1.批量抓取百度首頁(yè)(每頁(yè)),提取出高頻的關(guān)鍵字組合;2.對關(guān)鍵字進(jìn)行md5+hash加密,用于加密之后的參數;3.然后提取出低頻詞或者模糊搜索關(guān)鍵字,放入正則;4.放入所需的參數中即可,譬如用戶(hù)。 查看全部
解決方案:web開(kāi)發(fā)中如何快速開(kāi)發(fā)標準?
文章采集調用百度收錄-提取請求參數getheaderbyormer提取關(guān)鍵字直接編譯下getheaderbyormer成java腳本,生成jar然后調用即可先直接在http請求的getheaderbyformer用-g打開(kāi)獲取到的參數xml然后使用java反射最終構造出java類(lèi)作為參數提交到web頁(yè)面中開(kāi)發(fā)還是maven比較方便可以管理版本和依賴(lài)項,發(fā)布到服務(wù)器,更方便代碼更穩定。

樓上建議maven的非常對,但是我覺(jué)得你還需要了解一個(gè)東西,就是spring整個(gè)的生態(tài)圈,如果使用的netty,那么我覺(jué)得你可以參考maven來(lái)實(shí)現,他不是唯一的做事情的方式,但是做web開(kāi)發(fā),用maven肯定不是最佳方式,沒(méi)有看到過(guò)用jpa的,畢竟web開(kāi)發(fā)的難度還是比較大的。我個(gè)人覺(jué)得spring使用用,相比jpa而言做開(kāi)發(fā)難度就降低不少。

如果要更快速的話(huà)我建議使用ejb標準,現在ejb泛濫,效率極其低,企業(yè)環(huán)境下不常用,也很難改。企業(yè)環(huán)境是一個(gè)復雜度很高的問(wèn)題,往往涉及到架構本身的設計,系統的性能優(yōu)化,業(yè)務(wù)復雜度,單體環(huán)境對網(wǎng)絡(luò )和硬件的要求,權限劃分,數據庫同步等問(wèn)題。而spring讓這些復雜的內容成為可能,但是真正想要快速開(kāi)發(fā),還是推薦maven,要不然又是spring的一堆坑。
對于如何快速,我可以給出一個(gè)看起來(lái)比較容易實(shí)現的方法:1.批量抓取百度首頁(yè)(每頁(yè)),提取出高頻的關(guān)鍵字組合;2.對關(guān)鍵字進(jìn)行md5+hash加密,用于加密之后的參數;3.然后提取出低頻詞或者模糊搜索關(guān)鍵字,放入正則;4.放入所需的參數中即可,譬如用戶(hù)。
解決方案:最簡(jiǎn)單的方法,優(yōu)采云 采集后直接導入到wordpress的數據庫
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-11-28 12:24
采集后直接導入到wordpress的數據庫
很多人用wordpress做網(wǎng)站,用優(yōu)采云
采集
,但不會(huì )發(fā)布。這里有一個(gè)簡(jiǎn)單的方法,可以瞬間將采集
到的內容直接發(fā)布到wordpress
優(yōu)點(diǎn):簡(jiǎn)單、快速、一目了然。
缺點(diǎn):發(fā)布文章的分類(lèi)標簽需要手動(dòng)編輯。
更適合純文本,或者像尷尬百科這樣的笑話(huà)網(wǎng)站
不談采集
,只談出版,
這里是最簡(jiǎn)單的演示,只發(fā)布內容和標題,要發(fā)布其他內容,照著(zhù)做即可。
首先找到默認模板:
然后將模板更改為這樣的東西,
這段代碼是怎么來(lái)的?了解數據庫的人一看就會(huì )知道。如果你不懂數據庫,叫你哥是一種簡(jiǎn)單的方式??臻g帶的mysql數據庫有運行界面phpmyadmin,一般空間都有。打開(kāi)找到wp-post表,插入一條數據:這條數據,只填content和title
, 其他留空
然后點(diǎn)擊執行,你會(huì )看到這樣一段代碼:
插入 `DatabaseName`.`wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status` , `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count `) VALUES (NULL, '0', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '內容 xxxxxxx', '標題 XXXXXXXX', '', '發(fā)布', '打開(kāi)', '打開(kāi)', '', '', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', ' ', '0', '', '0', '發(fā)布', '', '0');
替換:數據庫名稱(chēng) -> 你的數據庫名稱(chēng)
匯總:Python如何采集關(guān)鍵詞數據
對于SEO來(lái)說(shuō),關(guān)鍵詞的排名對網(wǎng)站優(yōu)化起著(zhù)決定性的作用。關(guān)鍵詞排名、流量來(lái)源、同行網(wǎng)站數據都可以通過(guò)SEO查詢(xún)。常見(jiàn)的愛(ài)站站長(cháng)工具、站長(cháng)工具和5118都是不錯的網(wǎng)站。
當然現在5118更全面,應用更廣泛!
在數據和功能上,5118很強大!
可以的話(huà)就付錢(qián)!
5118的抗爬還是很不錯的!
需要登錄領(lǐng)取,發(fā)現5118更新了一次!
比如登錄賬號需要經(jīng)過(guò)滑塊驗證碼的反爬限制,關(guān)鍵詞索引等數據以圖片加密的形式展示。這人渣破解不了,就怕了。.
不過(guò)有些數據還是可以參考的!所以,讓 python 起來(lái)!
打聽(tīng)一下設計網(wǎng)站,關(guān)鍵詞設計迷信現狀
抓取網(wǎng)址:
如果您不是付費會(huì )員,您只能查看前100頁(yè)的數據!
很多數據都是反爬限制,有點(diǎn)可惜!
雖然5118會(huì )員登錄有滑塊驗證碼,但是cookies登錄還是非常好用的!
我們手動(dòng)添加 cookie 以登錄以采集
所需數據。
幾個(gè)關(guān)鍵點(diǎn):
1.添加協(xié)議頭
headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': ua,
'X-Requested-With': 'XMLHttpRequest',
}
自行添加ua和cooikes!
當然這是一個(gè)完整的協(xié)議頭,有些可以刪掉,大家可以自己試試!
2. zip函數的使用及格式化數據處理
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
3.排名波動(dòng)的處理
通過(guò)源碼查詢(xún)可以知道,綠色表示排名上升,紅色表示排名下降。這里有一個(gè)判斷就搞定了!
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
4. 關(guān)鍵詞 將數據寫(xiě)入csv
寫(xiě)了一個(gè)案例,發(fā)現了兩個(gè)參考案例
import csv
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#參考一
def write_csv(self):
path = "aa.csv"
with open(path, 'a+') as f:
csv_write = csv.writer(f)
data_row = ["1", "2"]
<p>
csv_write.writerow(data_row)
# 參考二
def wcsv(self):
csvfile = open('csvtest.csv', 'w')
writer = csv.writer(csvfile)
writer.writerow(['keywords'])
data = [
('1', 'http://www.xiaoheiseo.com/', '小黑'),
('2', 'http://www.baidu.com/', '百度'),
('3', 'http://www.jd.com/', '京東')
]
writer.writerows(data)
csvfile.close()
</p>
5、查詢(xún)網(wǎng)站相關(guān)關(guān)鍵詞數據,寫(xiě)入excel表格
使用第三方庫, xlsxwriter
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
由于頁(yè)碼也是js生成的,所以沒(méi)有找到,所以自己輸入頁(yè)碼!
輸入查詢(xún)網(wǎng)站的URL格式為:抓取后數據存儲文件使用主域名!
附上完整代碼:
#5118網(wǎng)站關(guān)鍵詞數據獲取
import requests
from lxml import etree
from urllib.parse import unquote
import xlsxwriter
import time
import csv
class C5118(object):
def __init__(self,url,nums):
self.keyword_datas=[]
self.data_lists=[]
self.index_links_hrefs=[]
self.headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': UA,
'X-Requested-With': 'XMLHttpRequest',
}
self.post_url=url
self.file_name=url.split('.')[1]
self.pagenums=nums
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
<p>
#獲取數據
def get_data(self,pagenum):
url="https://www.5118.com/seo/baidupc"
params={
'isPager': 'true',
'viewtype': '2',
'days': '90',
'url': self.post_url,
'orderField': 'Rank',
'orderDirection': 'asc',
'pageIndex': pagenum, #頁(yè)碼
'catalogName': '',
}
response=requests.post(url,params=params,headers=self.headers)
time.sleep(1)
print(response.status_code)
doc=etree.HTML(response.content.decode('utf-8'))
keywords= doc.xpath('//tr[@class="list-row"]/td[1]/a/text()') #關(guān)鍵詞
print(keywords)
self.keyword_datas.extend(keywords)
ranks = doc.xpath('//tr[@class="list-row"]/td[2]/a') #排名
titles = doc.xpath('//tr[@class="list-row"]/td[5]/a/text()') #網(wǎng)頁(yè)標題
links=doc.xpath('//tr[@class="list-row"]/td[5]/a/@href') #網(wǎng)頁(yè)鏈接
index_links=doc.xpath('//tr[@class="list-row"]/td[7]/a/@href') #長(cháng)尾詞數量鏈接
self.index_links_hrefs.extend(index_links)
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
self.data_lists.append(data)
time.sleep(4)
return self.data_lists
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
def main(self):
for i in range(1,self.pagenums+1):
print(f'>>> 正在采集第{i}頁(yè)關(guān)鍵詞數據...')
self.get_data(i)
print("數據采集完成!")
self.write_keywords()
self.write_to_xlsx()
if __name__=="__main__":
url = "www.shejipi.com"
nums=100
spider=C5118(url,nums)
spider.main()
</p> 查看全部
解決方案:最簡(jiǎn)單的方法,優(yōu)采云
采集后直接導入到wordpress的數據庫
很多人用wordpress做網(wǎng)站,用優(yōu)采云
采集
,但不會(huì )發(fā)布。這里有一個(gè)簡(jiǎn)單的方法,可以瞬間將采集
到的內容直接發(fā)布到wordpress
優(yōu)點(diǎn):簡(jiǎn)單、快速、一目了然。
缺點(diǎn):發(fā)布文章的分類(lèi)標簽需要手動(dòng)編輯。
更適合純文本,或者像尷尬百科這樣的笑話(huà)網(wǎng)站
不談采集
,只談出版,

這里是最簡(jiǎn)單的演示,只發(fā)布內容和標題,要發(fā)布其他內容,照著(zhù)做即可。
首先找到默認模板:
然后將模板更改為這樣的東西,

這段代碼是怎么來(lái)的?了解數據庫的人一看就會(huì )知道。如果你不懂數據庫,叫你哥是一種簡(jiǎn)單的方式??臻g帶的mysql數據庫有運行界面phpmyadmin,一般空間都有。打開(kāi)找到wp-post表,插入一條數據:這條數據,只填content和title
, 其他留空
然后點(diǎn)擊執行,你會(huì )看到這樣一段代碼:
插入 `DatabaseName`.`wp_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status` , `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count `) VALUES (NULL, '0', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '內容 xxxxxxx', '標題 XXXXXXXX', '', '發(fā)布', '打開(kāi)', '打開(kāi)', '', '', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', ' ', '0', '', '0', '發(fā)布', '', '0');
替換:數據庫名稱(chēng) -> 你的數據庫名稱(chēng)
匯總:Python如何采集關(guān)鍵詞數據
對于SEO來(lái)說(shuō),關(guān)鍵詞的排名對網(wǎng)站優(yōu)化起著(zhù)決定性的作用。關(guān)鍵詞排名、流量來(lái)源、同行網(wǎng)站數據都可以通過(guò)SEO查詢(xún)。常見(jiàn)的愛(ài)站站長(cháng)工具、站長(cháng)工具和5118都是不錯的網(wǎng)站。
當然現在5118更全面,應用更廣泛!
在數據和功能上,5118很強大!
可以的話(huà)就付錢(qián)!
5118的抗爬還是很不錯的!
需要登錄領(lǐng)取,發(fā)現5118更新了一次!
比如登錄賬號需要經(jīng)過(guò)滑塊驗證碼的反爬限制,關(guān)鍵詞索引等數據以圖片加密的形式展示。這人渣破解不了,就怕了。.
不過(guò)有些數據還是可以參考的!所以,讓 python 起來(lái)!
打聽(tīng)一下設計網(wǎng)站,關(guān)鍵詞設計迷信現狀
抓取網(wǎng)址:
如果您不是付費會(huì )員,您只能查看前100頁(yè)的數據!
很多數據都是反爬限制,有點(diǎn)可惜!
雖然5118會(huì )員登錄有滑塊驗證碼,但是cookies登錄還是非常好用的!
我們手動(dòng)添加 cookie 以登錄以采集
所需數據。
幾個(gè)關(guān)鍵點(diǎn):
1.添加協(xié)議頭
headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': ua,
'X-Requested-With': 'XMLHttpRequest',
}
自行添加ua和cooikes!
當然這是一個(gè)完整的協(xié)議頭,有些可以刪掉,大家可以自己試試!
2. zip函數的使用及格式化數據處理
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
3.排名波動(dòng)的處理
通過(guò)源碼查詢(xún)可以知道,綠色表示排名上升,紅色表示排名下降。這里有一個(gè)判斷就搞定了!
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
4. 關(guān)鍵詞 將數據寫(xiě)入csv
寫(xiě)了一個(gè)案例,發(fā)現了兩個(gè)參考案例
import csv
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#參考一
def write_csv(self):
path = "aa.csv"
with open(path, 'a+') as f:
csv_write = csv.writer(f)
data_row = ["1", "2"]
<p>

csv_write.writerow(data_row)
# 參考二
def wcsv(self):
csvfile = open('csvtest.csv', 'w')
writer = csv.writer(csvfile)
writer.writerow(['keywords'])
data = [
('1', 'http://www.xiaoheiseo.com/', '小黑'),
('2', 'http://www.baidu.com/', '百度'),
('3', 'http://www.jd.com/', '京東')
]
writer.writerows(data)
csvfile.close()
</p>
5、查詢(xún)網(wǎng)站相關(guān)關(guān)鍵詞數據,寫(xiě)入excel表格
使用第三方庫, xlsxwriter
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
由于頁(yè)碼也是js生成的,所以沒(méi)有找到,所以自己輸入頁(yè)碼!
輸入查詢(xún)網(wǎng)站的URL格式為:抓取后數據存儲文件使用主域名!
附上完整代碼:
#5118網(wǎng)站關(guān)鍵詞數據獲取
import requests
from lxml import etree
from urllib.parse import unquote
import xlsxwriter
import time
import csv
class C5118(object):
def __init__(self,url,nums):
self.keyword_datas=[]
self.data_lists=[]
self.index_links_hrefs=[]
self.headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '0',
'Cookie': Cookies,
'Host': 'www.5118.com',
'Origin': 'https://www.5118.com',
'Referer': 'https://www.5118.com/',
'User-Agent': UA,
'X-Requested-With': 'XMLHttpRequest',
}
self.post_url=url
self.file_name=url.split('.')[1]
self.pagenums=nums
#判斷排名是否提升
def get_change(self,rank):
rank=etree.tostring(rank).decode('utf-8')
if "red" in str(rank):
change="下降"
elif "green" in str(rank):
change = "提升"
else:
change = "不變"
return change
<p>

#獲取數據
def get_data(self,pagenum):
url="https://www.5118.com/seo/baidupc"
params={
'isPager': 'true',
'viewtype': '2',
'days': '90',
'url': self.post_url,
'orderField': 'Rank',
'orderDirection': 'asc',
'pageIndex': pagenum, #頁(yè)碼
'catalogName': '',
}
response=requests.post(url,params=params,headers=self.headers)
time.sleep(1)
print(response.status_code)
doc=etree.HTML(response.content.decode('utf-8'))
keywords= doc.xpath('//tr[@class="list-row"]/td[1]/a/text()') #關(guān)鍵詞
print(keywords)
self.keyword_datas.extend(keywords)
ranks = doc.xpath('//tr[@class="list-row"]/td[2]/a') #排名
titles = doc.xpath('//tr[@class="list-row"]/td[5]/a/text()') #網(wǎng)頁(yè)標題
links=doc.xpath('//tr[@class="list-row"]/td[5]/a/@href') #網(wǎng)頁(yè)鏈接
index_links=doc.xpath('//tr[@class="list-row"]/td[7]/a/@href') #長(cháng)尾詞數量鏈接
self.index_links_hrefs.extend(index_links)
for keyword,rank,title,link,index_link in zip(keywords,ranks,titles,links,index_links):
data=[
keyword,
rank.xpath('string(.)').strip().replace(' ','').replace('\r\n','-'),
self.get_change(rank),
title,
unquote(link.split('target=')[-1]),
'https:{}'.format(index_link),
]
print(data)
self.data_lists.append(data)
time.sleep(4)
return self.data_lists
#關(guān)鍵詞數據寫(xiě)入csv
def write_keywords(self):
path='{}_keywords.csv'.format(self.file_name)
csvfile = open(path, 'a+')
for keyword in self.keyword_datas:
csvfile.write('%s\n' % keyword)
print("5118關(guān)鍵詞搜索數據寫(xiě)入csv成功!")
#數據寫(xiě)入excle表格
def write_to_xlsx(self):
workbook = xlsxwriter.Workbook('{}_search_results.xlsx'.format(self.file_name)) # 創(chuàng )建一個(gè)Excel文件
worksheet = workbook.add_worksheet(self.file_name)
title = ['關(guān)鍵詞', '排名', '排名波動(dòng)', '網(wǎng)頁(yè)標題', '網(wǎng)頁(yè)鏈接', '長(cháng)尾詞鏈接'] # 表格title
worksheet.write_row('A1', title)
for index, data in enumerate(self.data_lists):
num0 = str(index + 2)
row = 'A' + num0
worksheet.write_row(row, data)
workbook.close()
print("5118搜索數據寫(xiě)入excel成功!")
def main(self):
for i in range(1,self.pagenums+1):
print(f'>>> 正在采集第{i}頁(yè)關(guān)鍵詞數據...')
self.get_data(i)
print("數據采集完成!")
self.write_keywords()
self.write_to_xlsx()
if __name__=="__main__":
url = "www.shejipi.com"
nums=100
spider=C5118(url,nums)
spider.main()
</p>
解決方案:基于K8S部署filebeat及l(fā)ogstash并輸出到j(luò )ava程序中
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 120 次瀏覽 ? 2022-11-27 23:46
從 K8S 集群采集
容器日志并集中存儲。
溶液:
1、守護進(jìn)程集
運行文件節拍
作為守護進(jìn)程,Filebeat 會(huì )在 JAVA 程序中采集
通過(guò) logstash 發(fā)送的日志,然后由 JAVA 程序對其進(jìn)行處理并集中存儲。
2、邊車(chē)
每個(gè) POD 都增加了一個(gè)額外的 Filebeat 容器,Filebeat 讀取相應的日志,并通過(guò)日志共享將其發(fā)送到 JAVA 程序。
這兩種方法可以共存而不會(huì )發(fā)生沖突。DaemonSet 方法采集容器的標準輸出,如果有特殊要求,可以通過(guò) sidecar 方法自定義采集日志。
下面介紹了用于采集
容器日志的 daemonSet 方法的內容:
首先粘貼 K8S 部署的 yaml 文件:
# 創(chuàng )建賬戶(hù)
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager-role
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- events
- pods
verbs:
- get
- list
- watch
---
# 賬戶(hù)與角色綁定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: itsm-node-manager-role-binding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: itsm-node-manager-role
subjects:
- kind: ServiceAccount
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建logstash配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: logstash-config
namespace: kube-system
data:
logstash.yml: 'config.reload.automatic: true'
pipeline.conf: |-
input {
beats {
port => 5044
codec => json
}
}
filter {
}
output {
http {
http_method => "post"
format => "json"
# 此處配置程序的url路徑,java代碼會(huì )在下面貼出來(lái)。如果調用的是集群內部的程序,可以采用和filebeat一樣的域名方式
url => "http://192.168.0.195:8080/cont ... ot%3B
content_type => "application/json"
}
}
---
# 創(chuàng )建logstash
apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: kube-system
labels:
server: logstash-7.10.1
spec:
selector:
matchLabels:
<p>
k8s-app: logstash
template:
metadata:
creationTimestamp: null
labels:
k8s-app: logstash
name: logstash
spec:
containers:
- image: elastic/logstash:7.10.1
imagePullPolicy: IfNotPresent
name: logstash
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /usr/share/logstash/config/logstash.yml
name: logstash-config
readOnly: true
subPath: logstash.yml
- mountPath: /usr/share/logstash/pipeline/logstash.conf
name: logstash-config
readOnly: true
subPath: pipeline.conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 120
imagePullSecrets:
- name: dockerpull
volumes:
- configMap:
defaultMode: 420
name: logstash-config
name: logstash-config
---
# 創(chuàng )建logstash service
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: logstash
name: logstash
namespace: kube-system
spec:
type: ClusterIP
selector:
k8s-app: logstash
ports:
- port: 5044
protocol: TCP
targetPort: 5044
---
# 創(chuàng )建filebeat配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: filebeat-config
namespace: kube-system
data:
filebeat.yml: |-
filebeat.autodiscover:
providers:
- type: kubernetes
host: ${NODE_NAME}
hints.enabled: true
hints.default_config:
type: container
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
processors:
- add_cloud_metadata:
- add_host_metadata:
output.logstash:
hosts: ["logstash.kube-system.svc.cluster.local:5044"] # kubectl -n logs get svc
enabled: true
---
# 創(chuàng )建filebeat守護進(jìn)程
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: kube-system
labels:
server: filebeat-7.10.1
spec:
selector:
matchLabels:
name: filebeat
kubernetes.io/cluster-service: "true"
template:
metadata:
creationTimestamp: null
labels:
name: filebeat
kubernetes.io/cluster-service: "true"
spec:
containers:
- args:
- -c
- /etc/filebeat.yml
- -e
env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
image: elastic/filebeat:7.10.1
imagePullPolicy: IfNotPresent
name: filebeat
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /etc/filebeat.yml
name: config
readOnly: true
subPath: filebeat.yml
- mountPath: /usr/share/filebeat/data
name: data
- mountPath: /var/lib/docker/containers
name: varlibdockercontainers
readOnly: true
- mountPath: /var/log
name: varlog
readOnly: true
restartPolicy: Always
serviceAccount: itsm-node-manager
serviceAccountName: itsm-node-manager
volumes:
- configMap:
defaultMode: 384
name: filebeat-config
name: config
- hostPath:
path: /var/lib/docker/containers
type: ""
name: varlibdockercontainers
- hostPath:
path: /var/log
type: ""
name: varlog
- hostPath:
path: /opt/filebeat/data
type: DirectoryOrCreate
name: data
</p>
這是將多個(gè)部署信息放在一個(gè) YAML 文件中,用“---”分隔。
以下是 JAVA 代碼片段:
@Api(tags = "服務(wù)日志控制類(lèi)")
@Slf4j
@RestController
@RequestMapping("/containerLog")
public class ContainerLogController {
@Autowired
private ContainerLogService containerLogService;
@ApiOperation(value = "容器日志寫(xiě)入接口",produces = "application/json", response = String.class)
@PostMapping("insert")
public Result insert(HttpServletRequest httpServletRequest){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try {
br = httpServletRequest.getReader();
String str;
while ((str=br.readLine())!=null){
sb.append(str);
}
containerLogService.insert(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Result.newSuccess();
}
}
此時(shí),您可以獲取 logstash 發(fā)送的日志信息,并且容器日志均為 JSON 格式。
您可以在三個(gè)位置擴展以滿(mǎn)足您的需求:
1. 文件節拍采集
規則
2. 日志存儲過(guò)濾規則
3. 程序處理邏輯
最佳實(shí)踐:pytest文檔83 - 把收集的 yaml 文件轉 Item 用例并運行
前言
上一篇文章通過(guò)用例采集
掛鉤pytest_collect_file采集
YAML 文件,但只采集
用例,無(wú)法執行。
接下來(lái),詳細解釋如何將 yaml 文件的內容轉換為要執行的 Item 用例。
pytest_collect_file 采集
鉤子
準備 YAML 文件內容 test_login.yml
name: login case1<br />request:<br /> url: http://127.0.0.1:8000/api/v1/login/<br /> method: POST<br /> headers:<br /> Content-Type: application/json<br /> json:<br /> username: test<br /> password: 123456
首先將集合鉤子寫(xiě) conftest.py
def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return pytest.File.from_parent(parent, path=file_path)
如果采集
到 yaml 文件中,則返回 pytest。File.from_parent(父級,路徑=file_path),運行時(shí)將報告錯誤
============================================ ERRORS ============================================<br />_____________________________ ERROR collecting case/test_login.yml _____________________________<br />venv\lib\site-packages\_pytest\runner.py:339: in from_call<br /> result: Optional[TResult] = func()<br />venv\lib\site-packages\_pytest\runner.py:370: in <br /> call = CallInfo.from_call(lambda: list(collector.collect()), "collect")<br />venv\lib\site-packages\_pytest\nodes.py:536: in collect<br /> raise NotImplementedError("abstract")<br />E NotImplementedError: abstract<br />=================================== short test summary info ====================================<br />ERROR case/test_login.yml - NotImplementedError: abstract<br />!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!
該錯誤在 nodes.py 文件的 collect() 方法中報告,因此請在 nodes.py 中找到采集
器
class Collector(Node):<br /> """Collector instances create children through collect() and thus<br /> iteratively build a tree."""<br /><br /> class CollectError(Exception):<br /> """An error during collection, contains a custom message."""<br /><br /> def collect(self) -> Iterable[Union["Item", "Collector"]]:<br /> """Return a list of children (items and collectors) for this<br /> collection node."""<br /> raise NotImplementedError("abstract")
由于 collect() 方法
為空,它直接引發(fā)異常 NotImplementError(“abstract”),因此我們需要覆蓋 collect() 方法
YamlFile 重寫(xiě) collect()。
對應于 YamlFile 類(lèi),繼承 ytest。文件,它覆蓋 collect() 方法
class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield pytest.Item.from_parent(self, name=raw.get('name'), values=raw)
再次運行 pytest
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />item = <br /><br /> def pytest_runtest_call(item: Item) -> None:<br /> _update_current_test_var(item, "call")<br /> try:<br /> del sys.last_type<br /> del sys.last_value<br /> del sys.last_traceback<br /> except AttributeError:<br /> pass<br /> try:<br />> item.runtest()<br /><br />venv\lib\site-packages\_pytest\runner.py:167:<br />_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />self = <br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br />> raise NotImplementedError("runtest must be implemented by Item subclass")<br />E NotImplementedError: runtest must be implemented by Item subclass<br /><br />venv\lib\site-packages\_pytest\nodes.py:733: NotImplementedError
這次發(fā)生的錯誤在 runner.py 文件中報告,并且通過(guò)執行 runtest() 方法 NotImplementError(“runtest 必須由 Item 子類(lèi)實(shí)現”)引發(fā)的異常
?。?。
看到這里,就意味著(zhù)用例 Item 已經(jīng)生成,并且在執行時(shí),沒(méi)有定義執行 yaml 文件的方法,因此報告了一個(gè)錯誤
所以我在 nodes.py 中找到了 Item(Node) 類(lèi)
class Item(Node):<br /> """A basic test invocation item.<br /><br /> Note that for a single function there might be multiple test invocation items.<br /> """<br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br /> raise NotImplementedError("runtest must be implemented by Item subclass")
接下來(lái),您需要重寫(xiě) Item 中的運行測試以執行用例
重寫(xiě)項目的運行測試
您最終看到執行yaml文件的簡(jiǎn)短版本的界面用例 conftest.py 如下
import pytest<br />import requests<br />import yaml<br />from pathlib import Path<br /><br />def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return YamlFile.from_parent(parent, path=file_path)<br /><br />class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield YamlTest.from_parent(self, name=raw.get('name'), values=raw)<br /><br />class YamlTest(pytest.Item):<br /> def __init__(self, name, parent, values):<br /> super(YamlTest, self).__init__(name, parent)<br /> self.name = name<br /> self.values = values<br /> self.s = requests.session()<br /><br /> def runtest(self) -> None:<br /> """運行用例"""<br /> request_data = self.values["request"]<br /> response = self.s.request(**request_data)<br /> print("\n", response.text)
輸入pytest,您可以看到yaml文件作為用例執行 查看全部
解決方案:基于K8S部署filebeat及l(fā)ogstash并輸出到j(luò )ava程序中
從 K8S 集群采集
容器日志并集中存儲。
溶液:
1、守護進(jìn)程集
運行文件節拍
作為守護進(jìn)程,Filebeat 會(huì )在 JAVA 程序中采集
通過(guò) logstash 發(fā)送的日志,然后由 JAVA 程序對其進(jìn)行處理并集中存儲。
2、邊車(chē)
每個(gè) POD 都增加了一個(gè)額外的 Filebeat 容器,Filebeat 讀取相應的日志,并通過(guò)日志共享將其發(fā)送到 JAVA 程序。
這兩種方法可以共存而不會(huì )發(fā)生沖突。DaemonSet 方法采集容器的標準輸出,如果有特殊要求,可以通過(guò) sidecar 方法自定義采集日志。
下面介紹了用于采集
容器日志的 daemonSet 方法的內容:
首先粘貼 K8S 部署的 yaml 文件:
# 創(chuàng )建賬戶(hù)
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
k8s-app: itsm-node-manager
name: itsm-node-manager-role
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- events
- pods
verbs:
- get
- list
- watch
---
# 賬戶(hù)與角色綁定
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: itsm-node-manager-role-binding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: itsm-node-manager-role
subjects:
- kind: ServiceAccount
name: itsm-node-manager
namespace: kube-system
---
# 創(chuàng )建logstash配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: logstash-config
namespace: kube-system
data:
logstash.yml: 'config.reload.automatic: true'
pipeline.conf: |-
input {
beats {
port => 5044
codec => json
}
}
filter {
}
output {
http {
http_method => "post"
format => "json"
# 此處配置程序的url路徑,java代碼會(huì )在下面貼出來(lái)。如果調用的是集群內部的程序,可以采用和filebeat一樣的域名方式
url => "http://192.168.0.195:8080/cont ... ot%3B
content_type => "application/json"
}
}
---
# 創(chuàng )建logstash
apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: kube-system
labels:
server: logstash-7.10.1
spec:
selector:
matchLabels:
<p>

k8s-app: logstash
template:
metadata:
creationTimestamp: null
labels:
k8s-app: logstash
name: logstash
spec:
containers:
- image: elastic/logstash:7.10.1
imagePullPolicy: IfNotPresent
name: logstash
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /usr/share/logstash/config/logstash.yml
name: logstash-config
readOnly: true
subPath: logstash.yml
- mountPath: /usr/share/logstash/pipeline/logstash.conf
name: logstash-config
readOnly: true
subPath: pipeline.conf
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 120
imagePullSecrets:
- name: dockerpull
volumes:
- configMap:
defaultMode: 420
name: logstash-config
name: logstash-config
---
# 創(chuàng )建logstash service
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: logstash
name: logstash
namespace: kube-system
spec:
type: ClusterIP
selector:
k8s-app: logstash
ports:
- port: 5044
protocol: TCP
targetPort: 5044
---
# 創(chuàng )建filebeat配置文件
apiVersion: v1
kind: ConfigMap
metadata:
labels:
k8s-app: itsm-node-manager
name: filebeat-config
namespace: kube-system
data:
filebeat.yml: |-
filebeat.autodiscover:
providers:
- type: kubernetes
host: ${NODE_NAME}
hints.enabled: true
hints.default_config:
type: container
paths:
- /var/log/containers/*${data.kubernetes.container.id}.log
processors:
- add_cloud_metadata:
- add_host_metadata:
output.logstash:
hosts: ["logstash.kube-system.svc.cluster.local:5044"] # kubectl -n logs get svc
enabled: true
---
# 創(chuàng )建filebeat守護進(jìn)程
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
namespace: kube-system
labels:
server: filebeat-7.10.1
spec:
selector:
matchLabels:
name: filebeat
kubernetes.io/cluster-service: "true"
template:
metadata:
creationTimestamp: null

labels:
name: filebeat
kubernetes.io/cluster-service: "true"
spec:
containers:
- args:
- -c
- /etc/filebeat.yml
- -e
env:
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
image: elastic/filebeat:7.10.1
imagePullPolicy: IfNotPresent
name: filebeat
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
procMount: Default
runAsUser: 0
volumeMounts:
- mountPath: /etc/filebeat.yml
name: config
readOnly: true
subPath: filebeat.yml
- mountPath: /usr/share/filebeat/data
name: data
- mountPath: /var/lib/docker/containers
name: varlibdockercontainers
readOnly: true
- mountPath: /var/log
name: varlog
readOnly: true
restartPolicy: Always
serviceAccount: itsm-node-manager
serviceAccountName: itsm-node-manager
volumes:
- configMap:
defaultMode: 384
name: filebeat-config
name: config
- hostPath:
path: /var/lib/docker/containers
type: ""
name: varlibdockercontainers
- hostPath:
path: /var/log
type: ""
name: varlog
- hostPath:
path: /opt/filebeat/data
type: DirectoryOrCreate
name: data
</p>
這是將多個(gè)部署信息放在一個(gè) YAML 文件中,用“---”分隔。
以下是 JAVA 代碼片段:
@Api(tags = "服務(wù)日志控制類(lèi)")
@Slf4j
@RestController
@RequestMapping("/containerLog")
public class ContainerLogController {
@Autowired
private ContainerLogService containerLogService;
@ApiOperation(value = "容器日志寫(xiě)入接口",produces = "application/json", response = String.class)
@PostMapping("insert")
public Result insert(HttpServletRequest httpServletRequest){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try {
br = httpServletRequest.getReader();
String str;
while ((str=br.readLine())!=null){
sb.append(str);
}
containerLogService.insert(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Result.newSuccess();
}
}
此時(shí),您可以獲取 logstash 發(fā)送的日志信息,并且容器日志均為 JSON 格式。
您可以在三個(gè)位置擴展以滿(mǎn)足您的需求:
1. 文件節拍采集
規則
2. 日志存儲過(guò)濾規則
3. 程序處理邏輯
最佳實(shí)踐:pytest文檔83 - 把收集的 yaml 文件轉 Item 用例并運行
前言
上一篇文章通過(guò)用例采集
掛鉤pytest_collect_file采集
YAML 文件,但只采集
用例,無(wú)法執行。
接下來(lái),詳細解釋如何將 yaml 文件的內容轉換為要執行的 Item 用例。
pytest_collect_file 采集
鉤子
準備 YAML 文件內容 test_login.yml
name: login case1<br />request:<br /> url: http://127.0.0.1:8000/api/v1/login/<br /> method: POST<br /> headers:<br /> Content-Type: application/json<br /> json:<br /> username: test<br /> password: 123456
首先將集合鉤子寫(xiě) conftest.py
def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return pytest.File.from_parent(parent, path=file_path)
如果采集
到 yaml 文件中,則返回 pytest。File.from_parent(父級,路徑=file_path),運行時(shí)將報告錯誤
============================================ ERRORS ============================================<br />_____________________________ ERROR collecting case/test_login.yml _____________________________<br />venv\lib\site-packages\_pytest\runner.py:339: in from_call<br /> result: Optional[TResult] = func()<br />venv\lib\site-packages\_pytest\runner.py:370: in <br /> call = CallInfo.from_call(lambda: list(collector.collect()), "collect")<br />venv\lib\site-packages\_pytest\nodes.py:536: in collect<br /> raise NotImplementedError("abstract")<br />E NotImplementedError: abstract<br />=================================== short test summary info ====================================<br />ERROR case/test_login.yml - NotImplementedError: abstract<br />!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!

該錯誤在 nodes.py 文件的 collect() 方法中報告,因此請在 nodes.py 中找到采集
器
class Collector(Node):<br /> """Collector instances create children through collect() and thus<br /> iteratively build a tree."""<br /><br /> class CollectError(Exception):<br /> """An error during collection, contains a custom message."""<br /><br /> def collect(self) -> Iterable[Union["Item", "Collector"]]:<br /> """Return a list of children (items and collectors) for this<br /> collection node."""<br /> raise NotImplementedError("abstract")
由于 collect() 方法
為空,它直接引發(fā)異常 NotImplementError(“abstract”),因此我們需要覆蓋 collect() 方法
YamlFile 重寫(xiě) collect()。
對應于 YamlFile 類(lèi),繼承 ytest。文件,它覆蓋 collect() 方法
class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield pytest.Item.from_parent(self, name=raw.get('name'), values=raw)
再次運行 pytest
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />item = <br /><br /> def pytest_runtest_call(item: Item) -> None:<br /> _update_current_test_var(item, "call")<br /> try:<br /> del sys.last_type<br /> del sys.last_value<br /> del sys.last_traceback<br /> except AttributeError:<br /> pass<br /> try:<br />> item.runtest()<br /><br />venv\lib\site-packages\_pytest\runner.py:167:<br />_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br /><br />self = <br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br />> raise NotImplementedError("runtest must be implemented by Item subclass")<br />E NotImplementedError: runtest must be implemented by Item subclass<br /><br />venv\lib\site-packages\_pytest\nodes.py:733: NotImplementedError
這次發(fā)生的錯誤在 runner.py 文件中報告,并且通過(guò)執行 runtest() 方法 NotImplementError(“runtest 必須由 Item 子類(lèi)實(shí)現”)引發(fā)的異常

?。?。
看到這里,就意味著(zhù)用例 Item 已經(jīng)生成,并且在執行時(shí),沒(méi)有定義執行 yaml 文件的方法,因此報告了一個(gè)錯誤
所以我在 nodes.py 中找到了 Item(Node) 類(lèi)
class Item(Node):<br /> """A basic test invocation item.<br /><br /> Note that for a single function there might be multiple test invocation items.<br /> """<br /><br /> def runtest(self) -> None:<br /> """Run the test case for this item.<br /><br /> Must be implemented by subclasses.<br /><br /> .. seealso:: :ref:`non-python tests`<br /> """<br /> raise NotImplementedError("runtest must be implemented by Item subclass")
接下來(lái),您需要重寫(xiě) Item 中的運行測試以執行用例
重寫(xiě)項目的運行測試
您最終看到執行yaml文件的簡(jiǎn)短版本的界面用例 conftest.py 如下
import pytest<br />import requests<br />import yaml<br />from pathlib import Path<br /><br />def pytest_collect_file(file_path: Path, parent):<br /> # 獲取文件.yml 文件,匹配規則<br /> if file_path.suffix == ".yml" and file_path.name.startswith("test"):<br /> return YamlFile.from_parent(parent, path=file_path)<br /><br />class YamlFile(pytest.File):<br /><br /> def collect(self):<br /> """返回讀取內容的Iterable 可迭代對象"""<br /> raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))<br /> print(raw)<br /> # raw 是讀取 yml 數據的內容<br /> yield YamlTest.from_parent(self, name=raw.get('name'), values=raw)<br /><br />class YamlTest(pytest.Item):<br /> def __init__(self, name, parent, values):<br /> super(YamlTest, self).__init__(name, parent)<br /> self.name = name<br /> self.values = values<br /> self.s = requests.session()<br /><br /> def runtest(self) -> None:<br /> """運行用例"""<br /> request_data = self.values["request"]<br /> response = self.s.request(**request_data)<br /> print("\n", response.text)
輸入pytest,您可以看到yaml文件作為用例執行
分享文章:搜狐號文章圖片解密還原 含調用例子
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 137 次瀏覽 ? 2022-11-27 19:58
任何參與該網(wǎng)站的人都應該采集
搜狐文章,但最近搜狐文章的圖片已被加密。當你發(fā)送HTTP請求后想直接截取搜狐文章的正文,或者當你使用抓取軟件時(shí),發(fā)現搜狐文章的IMG圖片路徑是加密的???
仔細看看搜狐文章的文字 IMG 標簽路徑是加密的,但通過(guò)瀏覽器訪(fǎng)問(wèn)很正常,盲猜 JS 在起作用。
F12直接從褲襠,斷點(diǎn)調整。一目了然,你可以看到它是AES加密,你知道加密方法。直接調用 CryptoJS 庫進(jìn)行解密!
CryptoJS 加密模塊 AES ECB pkcs7 密鑰是
js 調用示例:需要引用 CryptoJS 加密庫
var?key?=?CryptoJS.enc.Utf8.parse("www.sohu.com6666");
<p>
function?AES_Encrypt(word)?{
????var?srcs?=?CryptoJS.enc.Utf8.parse(word);
????var?encrypted?=?CryptoJS.AES.encrypt(srcs,?key,?{
????????mode:?CryptoJS.mode</p>
干貨教程:一分鐘教你玩轉手機回收小程序,源碼+教程免費分享
在我們現在的生活中,最離不開(kāi)的就是手機了。隨著(zhù)智能手機的不斷普及,人們更換手機的頻率也在不斷加快,從而帶動(dòng)了二手手機回收市場(chǎng)的快速發(fā)展。在二手手機行業(yè)發(fā)展的今天,也誕生了很多手機回收小程序。今天我們就來(lái)介紹一下手機回收小程序的功能。
手機回收小程序功能介紹:
1.免費估價(jià)
用戶(hù)可以在小程序中完成一系列系統問(wèn)題,對手機進(jìn)行智能估價(jià),供用戶(hù)參考和比較。
2.品類(lèi)劃分
除了手機,該平臺還將涵蓋筆記本、平板電腦、攝影器材等各類(lèi)數碼電子產(chǎn)品。種類(lèi)型號齊全,滿(mǎn)足更多用戶(hù)的需求。
3.以舊換新
平臺通過(guò)對舊機進(jìn)行估價(jià)回收,讓用戶(hù)在平臺購買(mǎi)新機時(shí)可以抵扣,讓用戶(hù)獲得更大的優(yōu)惠。
4.在線(xiàn)回收
通過(guò)在線(xiàn)估值測試后,實(shí)現快速恢復,讓用戶(hù)更快回款。
五、行業(yè)資訊
平臺可以及時(shí)更新數字行業(yè)的動(dòng)態(tài)和新聞,讓用戶(hù)更容易了解最新的數字資訊。
目前,二手手機行業(yè)的市場(chǎng)規模并不遜色于二手車(chē)、二手房。而相比之下,二手手機市場(chǎng)需求更為剛性,交易更為頻繁。對于手機回收行業(yè)來(lái)說(shuō),小程序將擁有更廣闊的市場(chǎng)空間。
今天分享的資源包括手機數碼回收小程序源碼+零基礎新手教程。內容非常豐富,包括服務(wù)器和域名的配置、寶塔的安裝、小程序的安裝和啟動(dòng)等等,真正教你從零開(kāi)始搭建。并正式推出了自己的小程序。
免費領(lǐng)取手機數碼回收小程序源碼流程:
1. 點(diǎn)贊+關(guān)注“解密小程序”
2.私信回復關(guān)鍵詞:源碼(可以免費領(lǐng)?。?br />
如果資源失效,別著(zhù)急,請聯(lián)系小編補發(fā)!
感謝您的關(guān)注和支持。歡迎大家分享轉發(fā),讓更多需要的朋友看到??。未來(lái)我們也會(huì )努力分享更多優(yōu)質(zhì)的源碼、教程等資料。希望大家繼續關(guān)注!
《60分鐘教你:從零開(kāi)始搭建一個(gè)完整的小程序》
第一課:兩種方式教你注冊小程序賬號
第二課:如何為小程序選擇合適的服務(wù)器和域名?
第三課:十分鐘教你快速搭建服務(wù)器環(huán)境
第四課:一鍵輕松搭建小程序第三方系統——微引擎
第五課:教你快速安裝小程序應用
第六課:十分鐘教你正式上線(xiàn)微信小程序 查看全部
分享文章:搜狐號文章圖片解密還原 含調用例子
任何參與該網(wǎng)站的人都應該采集
搜狐文章,但最近搜狐文章的圖片已被加密。當你發(fā)送HTTP請求后想直接截取搜狐文章的正文,或者當你使用抓取軟件時(shí),發(fā)現搜狐文章的IMG圖片路徑是加密的???
仔細看看搜狐文章的文字 IMG 標簽路徑是加密的,但通過(guò)瀏覽器訪(fǎng)問(wèn)很正常,盲猜 JS 在起作用。
F12直接從褲襠,斷點(diǎn)調整。一目了然,你可以看到它是AES加密,你知道加密方法。直接調用 CryptoJS 庫進(jìn)行解密!

CryptoJS 加密模塊 AES ECB pkcs7 密鑰是
js 調用示例:需要引用 CryptoJS 加密庫
var?key?=?CryptoJS.enc.Utf8.parse("www.sohu.com6666");
<p>

function?AES_Encrypt(word)?{
????var?srcs?=?CryptoJS.enc.Utf8.parse(word);
????var?encrypted?=?CryptoJS.AES.encrypt(srcs,?key,?{
????????mode:?CryptoJS.mode</p>
干貨教程:一分鐘教你玩轉手機回收小程序,源碼+教程免費分享
在我們現在的生活中,最離不開(kāi)的就是手機了。隨著(zhù)智能手機的不斷普及,人們更換手機的頻率也在不斷加快,從而帶動(dòng)了二手手機回收市場(chǎng)的快速發(fā)展。在二手手機行業(yè)發(fā)展的今天,也誕生了很多手機回收小程序。今天我們就來(lái)介紹一下手機回收小程序的功能。
手機回收小程序功能介紹:
1.免費估價(jià)
用戶(hù)可以在小程序中完成一系列系統問(wèn)題,對手機進(jìn)行智能估價(jià),供用戶(hù)參考和比較。
2.品類(lèi)劃分
除了手機,該平臺還將涵蓋筆記本、平板電腦、攝影器材等各類(lèi)數碼電子產(chǎn)品。種類(lèi)型號齊全,滿(mǎn)足更多用戶(hù)的需求。
3.以舊換新
平臺通過(guò)對舊機進(jìn)行估價(jià)回收,讓用戶(hù)在平臺購買(mǎi)新機時(shí)可以抵扣,讓用戶(hù)獲得更大的優(yōu)惠。

4.在線(xiàn)回收
通過(guò)在線(xiàn)估值測試后,實(shí)現快速恢復,讓用戶(hù)更快回款。
五、行業(yè)資訊
平臺可以及時(shí)更新數字行業(yè)的動(dòng)態(tài)和新聞,讓用戶(hù)更容易了解最新的數字資訊。
目前,二手手機行業(yè)的市場(chǎng)規模并不遜色于二手車(chē)、二手房。而相比之下,二手手機市場(chǎng)需求更為剛性,交易更為頻繁。對于手機回收行業(yè)來(lái)說(shuō),小程序將擁有更廣闊的市場(chǎng)空間。
今天分享的資源包括手機數碼回收小程序源碼+零基礎新手教程。內容非常豐富,包括服務(wù)器和域名的配置、寶塔的安裝、小程序的安裝和啟動(dòng)等等,真正教你從零開(kāi)始搭建。并正式推出了自己的小程序。
免費領(lǐng)取手機數碼回收小程序源碼流程:
1. 點(diǎn)贊+關(guān)注“解密小程序”
2.私信回復關(guān)鍵詞:源碼(可以免費領(lǐng)?。?br />

如果資源失效,別著(zhù)急,請聯(lián)系小編補發(fā)!
感謝您的關(guān)注和支持。歡迎大家分享轉發(fā),讓更多需要的朋友看到??。未來(lái)我們也會(huì )努力分享更多優(yōu)質(zhì)的源碼、教程等資料。希望大家繼續關(guān)注!
《60分鐘教你:從零開(kāi)始搭建一個(gè)完整的小程序》
第一課:兩種方式教你注冊小程序賬號
第二課:如何為小程序選擇合適的服務(wù)器和域名?
第三課:十分鐘教你快速搭建服務(wù)器環(huán)境
第四課:一鍵輕松搭建小程序第三方系統——微引擎
第五課:教你快速安裝小程序應用
第六課:十分鐘教你正式上線(xiàn)微信小程序
測評:發(fā)布一個(gè)文章采集器大家試試,來(lái)者有分。
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 129 次瀏覽 ? 2022-11-26 03:17
免費PHPCMS采集規則文章采集器采集百萬(wàn)數據
直接在本地電腦上運行該工具,(為什么要使用本地采集工具,因為在本地電腦上運行采集工具不會(huì )對服務(wù)器造成任何影響,最大限度地發(fā)揮服務(wù)器的性能,讓網(wǎng)站打開(kāi)速度更快,并且允許搜索引擎的抓取速度更快!使用SEO工具實(shí)現...
【站群必備】自動(dòng)采集文章和偽原創(chuàng )文章后自動(dòng)發(fā)布文章-一站式服務(wù)
很多人在做網(wǎng)站群的時(shí)候,往往要么請人幫忙寫(xiě)... 自動(dòng)采集偽原創(chuàng )文章后自動(dòng)發(fā)布文章的集成在線(xiàn)采集服務(wù)。簡(jiǎn)單易操作的面板,最快3分鐘即可啟動(dòng),可大幅提升。規模管理站群,每天可自動(dòng)發(fā)布大量偽原創(chuàng )文章,并可選擇...
50行代碼教你打造公眾號文章采集器
Alfred的女票是數據科學(xué)領(lǐng)域的新媒體運營(yíng)官(沒(méi)錯,Alfred是程序員,Alfred有女票),每天閱讀大量行業(yè)相關(guān)文章,把握行業(yè)動(dòng)態(tài),選擇和生產(chǎn)相關(guān)...
【W(wǎng)ordpress】Wordpress插件自動(dòng)采集
發(fā)布工具
安裝好wordpress之后,就得開(kāi)始發(fā)布文章了。由于之前的文章散落在各個(gè)平臺上,要一篇一篇的復制,著(zhù)實(shí)費時(shí)費力。所以,想要一勞永逸的解決這個(gè)問(wèn)題,就必須要用到今天介紹的采集工具了。插件安裝搜索:Fat Rat Coolect ...
免費PBootCMS采集支持聚合文章采集插件
Q:如何安裝免費的PBOOT CMS采集插件?站長(cháng)必備PBoot采集工具答:直接下載到本地電腦,雙擊直接運行!...答案:每天可采集百萬(wàn)條數據,支持單列采集發(fā)布,支持多列采集發(fā)布。Q:免費PBOOTCMS插件合集
技術(shù)文章:英文網(wǎng)站文章采集,英文文章采集批量翻譯
英文網(wǎng)站文章采集
是我們常用的材料采集
方法,網(wǎng)站翻譯我們可以通過(guò)頁(yè)面瀏覽器自帶的翻譯進(jìn)行,但是如何對我們采集
的文章進(jìn)行本地批量翻譯,您需要使用我們的批量翻譯插件。
英文網(wǎng)站指定采集,
只需要進(jìn)入我們的目標網(wǎng)站,簡(jiǎn)單的操作不需要切換IP即可進(jìn)行,無(wú)論是英文、俄文、法文、日文、韓文等大小語(yǔ)種網(wǎng)站都可以進(jìn)行視覺(jué)選擇和采集操作,對于采集的文章,用自己的批量翻譯,可以在發(fā)布到我們的網(wǎng)站或本地的條件下保留原創(chuàng )
語(yǔ)言標簽和格式。
英文網(wǎng)站的推廣也離不開(kāi)SEO,除了素材的采集
,網(wǎng)站內容的日常及時(shí)更新,還需要進(jìn)行相關(guān)的SEO優(yōu)化。通過(guò)關(guān)鍵詞挖掘,獲取流行的實(shí)時(shí)下拉和長(cháng)尾關(guān)鍵詞及相關(guān)詞,然后通過(guò)全網(wǎng)匹配采集來(lái)采集這些長(cháng)尾詞,得到高質(zhì)量的爆款文章和熱點(diǎn)文章。
當我們想要增加頁(yè)面瀏覽量時(shí),最好定位競爭較低的關(guān)鍵詞——使它們更容易排名,我們將在 SERP 中看到更快的結果??梢詭椭覀冋业揭ㄎ坏年P(guān)鍵字。我們輸入關(guān)鍵字,該工具將顯示要定位的潛在關(guān)鍵字列表。
我們可以按關(guān)鍵字難度,國家,數量(每月訪(fǎng)問(wèn)者數量)等進(jìn)行排序。如果我們使用此工具查找難度分數低的長(cháng)尾關(guān)鍵字,我們將能夠創(chuàng )建一個(gè)關(guān)鍵字列表來(lái)定位,我們可以自己使用或提供給我們的作家團隊。
想象一下這樣的場(chǎng)景:我們查看市場(chǎng)上的潛在網(wǎng)站,但我們想知道該網(wǎng)站是否有潛力在花錢(qián)之前快速(并且非常容易)改進(jìn)。通常,我們必須做出估計并相信網(wǎng)站賣(mài)家對流量、收入、反向鏈接和關(guān)鍵字的說(shuō)法;但是,使用英語(yǔ)網(wǎng)站抓取等工具可以讓我們避免任何尷尬和代價(jià)高昂的錯誤。
我們可能會(huì )在軟件中運行網(wǎng)站的域名,并接收數據和有價(jià)值信息的列表。例如,我們可以看到他們排名的關(guān)鍵字(更重要的是,他們沒(méi)有排名)以及他們與競爭對手的匹配程度。
如果我們遇到未使用的關(guān)鍵字,但競爭對手確實(shí)如此,我們可以看到使用英語(yǔ)網(wǎng)站抓取工具創(chuàng )建內容并超越它們是多么容易。英文網(wǎng)站抓取工具為我們輸入的任何搜索詞提供詳細數據,告訴我們與排名靠前的搜索詞競爭是多么容易。
我們可能會(huì )遇到的另一種情況是找到一個(gè)在搜索結果中表現良好但沒(méi)有良好內容或大量反向鏈接的網(wǎng)站。當這種情況發(fā)生時(shí),這是一個(gè)好兆頭,因為我們可以創(chuàng )建更好的內容,添加反向鏈接并獲得更好的排名。
英文網(wǎng)站集合有一些價(jià)格計劃,但即使是最便宜的計劃也允許我們跟蹤 100 個(gè)關(guān)鍵字。跟蹤多個(gè)關(guān)鍵字意味著(zhù)我們可以訪(fǎng)問(wèn)數據,并可以查看每個(gè)關(guān)鍵字的可視化屏幕和網(wǎng)站性能報告。我們可以在移動(dòng)和桌面結果之間切換,并查看所有領(lǐng)先搜索引擎的日?;顒?dòng)。 查看全部
測評:發(fā)布一個(gè)文章采集器大家試試,來(lái)者有分。
免費PHPCMS采集規則文章采集器采集百萬(wàn)數據
直接在本地電腦上運行該工具,(為什么要使用本地采集工具,因為在本地電腦上運行采集工具不會(huì )對服務(wù)器造成任何影響,最大限度地發(fā)揮服務(wù)器的性能,讓網(wǎng)站打開(kāi)速度更快,并且允許搜索引擎的抓取速度更快!使用SEO工具實(shí)現...
【站群必備】自動(dòng)采集文章和偽原創(chuàng )文章后自動(dòng)發(fā)布文章-一站式服務(wù)

很多人在做網(wǎng)站群的時(shí)候,往往要么請人幫忙寫(xiě)... 自動(dòng)采集偽原創(chuàng )文章后自動(dòng)發(fā)布文章的集成在線(xiàn)采集服務(wù)。簡(jiǎn)單易操作的面板,最快3分鐘即可啟動(dòng),可大幅提升。規模管理站群,每天可自動(dòng)發(fā)布大量偽原創(chuàng )文章,并可選擇...
50行代碼教你打造公眾號文章采集器
Alfred的女票是數據科學(xué)領(lǐng)域的新媒體運營(yíng)官(沒(méi)錯,Alfred是程序員,Alfred有女票),每天閱讀大量行業(yè)相關(guān)文章,把握行業(yè)動(dòng)態(tài),選擇和生產(chǎn)相關(guān)...
【W(wǎng)ordpress】Wordpress插件自動(dòng)采集
發(fā)布工具

安裝好wordpress之后,就得開(kāi)始發(fā)布文章了。由于之前的文章散落在各個(gè)平臺上,要一篇一篇的復制,著(zhù)實(shí)費時(shí)費力。所以,想要一勞永逸的解決這個(gè)問(wèn)題,就必須要用到今天介紹的采集工具了。插件安裝搜索:Fat Rat Coolect ...
免費PBootCMS采集支持聚合文章采集插件
Q:如何安裝免費的PBOOT CMS采集插件?站長(cháng)必備PBoot采集工具答:直接下載到本地電腦,雙擊直接運行!...答案:每天可采集百萬(wàn)條數據,支持單列采集發(fā)布,支持多列采集發(fā)布。Q:免費PBOOTCMS插件合集
技術(shù)文章:英文網(wǎng)站文章采集,英文文章采集批量翻譯
英文網(wǎng)站文章采集
是我們常用的材料采集
方法,網(wǎng)站翻譯我們可以通過(guò)頁(yè)面瀏覽器自帶的翻譯進(jìn)行,但是如何對我們采集
的文章進(jìn)行本地批量翻譯,您需要使用我們的批量翻譯插件。
英文網(wǎng)站指定采集,
只需要進(jìn)入我們的目標網(wǎng)站,簡(jiǎn)單的操作不需要切換IP即可進(jìn)行,無(wú)論是英文、俄文、法文、日文、韓文等大小語(yǔ)種網(wǎng)站都可以進(jìn)行視覺(jué)選擇和采集操作,對于采集的文章,用自己的批量翻譯,可以在發(fā)布到我們的網(wǎng)站或本地的條件下保留原創(chuàng )
語(yǔ)言標簽和格式。
英文網(wǎng)站的推廣也離不開(kāi)SEO,除了素材的采集
,網(wǎng)站內容的日常及時(shí)更新,還需要進(jìn)行相關(guān)的SEO優(yōu)化。通過(guò)關(guān)鍵詞挖掘,獲取流行的實(shí)時(shí)下拉和長(cháng)尾關(guān)鍵詞及相關(guān)詞,然后通過(guò)全網(wǎng)匹配采集來(lái)采集這些長(cháng)尾詞,得到高質(zhì)量的爆款文章和熱點(diǎn)文章。

當我們想要增加頁(yè)面瀏覽量時(shí),最好定位競爭較低的關(guān)鍵詞——使它們更容易排名,我們將在 SERP 中看到更快的結果??梢詭椭覀冋业揭ㄎ坏年P(guān)鍵字。我們輸入關(guān)鍵字,該工具將顯示要定位的潛在關(guān)鍵字列表。
我們可以按關(guān)鍵字難度,國家,數量(每月訪(fǎng)問(wèn)者數量)等進(jìn)行排序。如果我們使用此工具查找難度分數低的長(cháng)尾關(guān)鍵字,我們將能夠創(chuàng )建一個(gè)關(guān)鍵字列表來(lái)定位,我們可以自己使用或提供給我們的作家團隊。
想象一下這樣的場(chǎng)景:我們查看市場(chǎng)上的潛在網(wǎng)站,但我們想知道該網(wǎng)站是否有潛力在花錢(qián)之前快速(并且非常容易)改進(jìn)。通常,我們必須做出估計并相信網(wǎng)站賣(mài)家對流量、收入、反向鏈接和關(guān)鍵字的說(shuō)法;但是,使用英語(yǔ)網(wǎng)站抓取等工具可以讓我們避免任何尷尬和代價(jià)高昂的錯誤。

我們可能會(huì )在軟件中運行網(wǎng)站的域名,并接收數據和有價(jià)值信息的列表。例如,我們可以看到他們排名的關(guān)鍵字(更重要的是,他們沒(méi)有排名)以及他們與競爭對手的匹配程度。
如果我們遇到未使用的關(guān)鍵字,但競爭對手確實(shí)如此,我們可以看到使用英語(yǔ)網(wǎng)站抓取工具創(chuàng )建內容并超越它們是多么容易。英文網(wǎng)站抓取工具為我們輸入的任何搜索詞提供詳細數據,告訴我們與排名靠前的搜索詞競爭是多么容易。
我們可能會(huì )遇到的另一種情況是找到一個(gè)在搜索結果中表現良好但沒(méi)有良好內容或大量反向鏈接的網(wǎng)站。當這種情況發(fā)生時(shí),這是一個(gè)好兆頭,因為我們可以創(chuàng )建更好的內容,添加反向鏈接并獲得更好的排名。
英文網(wǎng)站集合有一些價(jià)格計劃,但即使是最便宜的計劃也允許我們跟蹤 100 個(gè)關(guān)鍵字。跟蹤多個(gè)關(guān)鍵字意味著(zhù)我們可以訪(fǎng)問(wèn)數據,并可以查看每個(gè)關(guān)鍵字的可視化屏幕和網(wǎng)站性能報告。我們可以在移動(dòng)和桌面結果之間切換,并查看所有領(lǐng)先搜索引擎的日?;顒?dòng)。
解決方案:微服務(wù)遠程調用組件Feign的使用詳解
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-11-25 18:38
一、總結
我們知道目前最火、技術(shù)含量最高的技術(shù)就是SpringCloud微服務(wù),那么今天一哥就帶大家了解一下微服務(wù)的核心組件之一,Feign的基本使用及其工作機制。
二、Feign簡(jiǎn)介 一、概念
在學(xué)習如何使用Feign之前,我們先來(lái)了解一下什么是Feign。
Feign 是 Netflix 開(kāi)發(fā)的聲明式(目前由 Spring 維護)和模板化的 HTTP 客戶(hù)端。Feign可以幫助我們更快速優(yōu)雅的調用HTTP Api。
簡(jiǎn)單來(lái)說(shuō),Feign是一個(gè)遠程服務(wù)調用的框架/工具,可以讓開(kāi)發(fā)者以更低耦合、更少代碼、更快、更兼容的方式進(jìn)行遠程服務(wù)調用。
2.功能
了解了這些基本概念之后,接下來(lái)小編就帶大家看看Feign組件是如何實(shí)現遠程接口調用的。話(huà)不多說(shuō),我們直接上代碼。
三、服務(wù)提供者 1、添加依賴(lài)
首先我們在父POM文件中添加核心依賴(lài),如下:
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba-dependencies.version}
pom
import
然后在子POM文件中添加依賴(lài)如下:
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.配置文件
在 application.yml 文件中添加如下配置:
server:
port: 8090
spring:
application:
name: nacos-feign-example
cloud:
nacos:
discovery:
server-addr: 112.74.42.138:8848
3、創(chuàng )業(yè)班
項目的啟動(dòng)類(lèi)代碼如下:
@SpringBootApplication
public class NetflixFeignProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NetflixFeignProviderApplication.class, args);
}
}
4.控制層
我們可以寫(xiě)一個(gè)Controller控制器,定義web界面如下。
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
/**
* 模擬主鍵自增
*/
private AtomicInteger pk = new AtomicInteger();
<p>
@PostMappingpublic User save(@RequestBody User user) {
user.setUid(pk.incrementAndGet());
return user;
}
/**
* @param uid
* @return
*/@GetMapping("/{uid}")
public User user(@PathVariable("uid") int uid) {
return User.builder()
.uid(uid)
.username("admin")
.password("123456")
.build();
}
@GetMapping("/users")
public List users(@RequestHeader("token") String token) {
// 模擬從數據中獲取數據
ArrayList users = new ArrayList();
for (int i = 1; i 查看全部
解決方案:微服務(wù)遠程調用組件Feign的使用詳解
一、總結
我們知道目前最火、技術(shù)含量最高的技術(shù)就是SpringCloud微服務(wù),那么今天一哥就帶大家了解一下微服務(wù)的核心組件之一,Feign的基本使用及其工作機制。
二、Feign簡(jiǎn)介 一、概念
在學(xué)習如何使用Feign之前,我們先來(lái)了解一下什么是Feign。
Feign 是 Netflix 開(kāi)發(fā)的聲明式(目前由 Spring 維護)和模板化的 HTTP 客戶(hù)端。Feign可以幫助我們更快速優(yōu)雅的調用HTTP Api。
簡(jiǎn)單來(lái)說(shuō),Feign是一個(gè)遠程服務(wù)調用的框架/工具,可以讓開(kāi)發(fā)者以更低耦合、更少代碼、更快、更兼容的方式進(jìn)行遠程服務(wù)調用。
2.功能
了解了這些基本概念之后,接下來(lái)小編就帶大家看看Feign組件是如何實(shí)現遠程接口調用的。話(huà)不多說(shuō),我們直接上代碼。
三、服務(wù)提供者 1、添加依賴(lài)
首先我們在父POM文件中添加核心依賴(lài),如下:
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba-dependencies.version}
pom
import
然后在子POM文件中添加依賴(lài)如下:
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.配置文件
在 application.yml 文件中添加如下配置:
server:
port: 8090
spring:
application:
name: nacos-feign-example
cloud:
nacos:
discovery:
server-addr: 112.74.42.138:8848
3、創(chuàng )業(yè)班
項目的啟動(dòng)類(lèi)代碼如下:
@SpringBootApplication
public class NetflixFeignProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NetflixFeignProviderApplication.class, args);
}
}
4.控制層
我們可以寫(xiě)一個(gè)Controller控制器,定義web界面如下。
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
/**
* 模擬主鍵自增
*/
private AtomicInteger pk = new AtomicInteger();
<p>

@PostMappingpublic User save(@RequestBody User user) {
user.setUid(pk.incrementAndGet());
return user;
}
/**
* @param uid
* @return
*/@GetMapping("/{uid}")
public User user(@PathVariable("uid") int uid) {
return User.builder()
.uid(uid)
.username("admin")
.password("123456")
.build();
}
@GetMapping("/users")
public List users(@RequestHeader("token") String token) {
// 模擬從數據中獲取數據
ArrayList users = new ArrayList();
for (int i = 1; i
解決方案:支付寶小程序:人臉采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 411 次瀏覽 ? 2022-11-23 09:41
產(chǎn)品描述
人臉識別是公共服務(wù)場(chǎng)所提高業(yè)務(wù)效率和用戶(hù)體驗的新途徑。人臉采集是指在獲得用戶(hù)充分授權認可、充分保護用戶(hù)隱私的前提下,獲取符合質(zhì)量要求的活人。人臉圖片用于后續比對、識別等操作,提升商戶(hù)服務(wù)質(zhì)量。核心功能包括:
用戶(hù)界面
調用過(guò)程
應用場(chǎng)景
人臉應用廣泛,可應用于以下場(chǎng)景:
場(chǎng)景
描述
拍攝證件照
小程序提供拍攝證件照的功能,光線(xiàn)角度好。
團餐
在校園點(diǎn)餐場(chǎng)景中,錄入學(xué)生人臉,用于刷臉點(diǎn)餐。
不建議使用通過(guò)人臉采集小程序返回給開(kāi)發(fā)者的真人照片與開(kāi)發(fā)者自己的比對源圖在安全性較差的比對算法下進(jìn)行身份驗證。如果開(kāi)發(fā)者需要驗證身份,請使用支付寶身份驗證?或其他開(kāi)放通道人臉認證產(chǎn)品。由于支付寶身份驗證產(chǎn)品擁有完備的風(fēng)控體系和更安全的后臺活體檢測算法,具有非常強的抗攻擊和防誤識別能力。
注意:
小程序“人臉認證”開(kāi)放能力全面升級為“支付寶認證”,推薦開(kāi)發(fā)者使用“支付寶認證”能力;已簽約上線(xiàn)“人臉認證”的小程序可繼續使用。
訪(fǎng)問(wèn)要求
注意:
計費方式
自由的
接入指南第一步:創(chuàng )建小程序
要在您的小程序中使用人臉抓拍功能,您需要先完成開(kāi)發(fā)者注冊并創(chuàng )建一個(gè)小程序。
第二步:添加功能
小程序創(chuàng )建完成后,開(kāi)發(fā)者可以在“能力列表”部分點(diǎn)擊“添加能力”,為創(chuàng )建的小程序添加能力,如下圖;開(kāi)發(fā)者勾選人臉采集能力后,點(diǎn)擊右下角的確定完成添加。
第三步:承包能力
人臉采集功能需要簽名才能生效。請點(diǎn)擊功能列表右側的“立即注冊”。簽約成功后,狀態(tài)會(huì )置為“Active”,即可調用人臉采集接口。
第四步:集成并配置SDK
服務(wù)端SDK需要商家在自己的服務(wù)端系統中集成,用于后續服務(wù)端接口調用。
下載服務(wù)端SDK
為了方便開(kāi)發(fā)者調用開(kāi)放接口,我們提供開(kāi)放平臺服務(wù)端SDK,包括JAVA、PHP、NodeJS、Python、.NET五種語(yǔ)言,封裝了簽名&驗證、HTTP接口請求等基礎功能,請下載相應語(yǔ)言版本的SDK并導入到您的開(kāi)發(fā)項目中。
接口調用配置
在調用 SDK 之前需要對其進(jìn)行初始化。以JAVA代碼為例:
AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
關(guān)鍵參數說(shuō)明:
配置參數
示例值解釋
如何獲取/示例值
網(wǎng)址
支付寶網(wǎng)關(guān)(固定)
APPID
創(chuàng )建應用后生成APPID
獲取查看創(chuàng )建應用程序
APP_PRIVATE_KEY
開(kāi)發(fā)者私鑰,由開(kāi)發(fā)者自己生成
獲取配置密鑰
格式
參數返回格式,只支持json
json(固定)
字符集
編碼集,支持GBK/UTF-8
開(kāi)發(fā)者根據實(shí)際工程代碼進(jìn)行配置
ALIPAY_PUBLIC_KEY
支付寶公鑰,由支付寶生成
有關(guān)詳細信息,請參閱配置密鑰
SIGN_TYPE
商戶(hù)生成簽名串使用的簽名算法類(lèi)型。目前支持RSA2和RSA,推薦使用RSA2
RSA2
接下來(lái)就可以使用alipayClient來(lái)調用具體的API了。AlipayClient只需要初始化一次,后續調用不同的API可以使用同一個(gè)alipayClient對象。
注意:
ISV/開(kāi)發(fā)者可以通過(guò)第三方應用授權獲取商家授權令牌(app_auth_token)作為請求參數,實(shí)現代表商家發(fā)起請求的能力。
第五步:調用接口
調用流程圖
調用 JSAPI (faceVerify) 調用人臉采集。整個(gè)采集過(guò)程完全由人臉執行。采集完成后,通過(guò)回調函數返回采集結果。在采集過(guò)程中,客戶(hù)端完成人臉采集過(guò)程和活體檢測,然后將采集到的人臉特征數據上傳到服務(wù)器進(jìn)行進(jìn)一步的活體檢測,最后將采集結果返回給客戶(hù)端。
調用查詢(xún)接口(zoloz.identification.user.web.query)獲取可信的采集結果。如果采集成功,可以通過(guò)該接口獲取采集到的人臉照片。
主要步驟
版本要求:
調用接口my.ap.faceVerify,傳入參數bizId和bizType,即可觸發(fā)人臉采集。采集完成后,通過(guò)回調函數獲取采集結果。
請注意,在 my.ap.faceVerify 調用返回之前,切記不要發(fā)起第二次 faceVerify 調用,否則會(huì )產(chǎn)生異常。例如,如果您的小程序通過(guò)單擊頁(yè)面上的按鈕觸發(fā)對 my.ap.faceVerify 的調用,請確保在調用返回之前禁用該按鈕,以防止用戶(hù)進(jìn)行多次單擊。
代碼示例
my.ap.faceVerify({ bizId: '545689787654767653', //業(yè)務(wù)流水號,商戶(hù)自行生成,需要保證唯一性,不超過(guò)64位 bizType: '1', //業(yè)務(wù)場(chǎng)景參數,‘1’代表人臉采集,請務(wù)必填寫(xiě) useBackCamera: true, //傳入此參數會(huì )喚起后置攝像頭;非必填,不傳默認喚起前置攝像頭 success: (res) => { my.alert({ content: JSON.stringify(res), }); }, fail: (res) => { my.alert({ content: JSON.stringify(res), }); }});
成功認證結果示例
faceRetCode = 1000表示人臉采集成功,調用查詢(xún)接口(zoloz.identification.user.web.query)可以成功獲取照片,證明人臉采集成功。
{ faceRetCode: "1000", retCode: "OK_SUCCESS", retCodeSub: "Z5100", retMessageSub: "成功 (Z5100)", zimId: "7b6b72be1493cab72dd0a25877de329dd00"}undefined
注意retCode表示人臉識別可用成功,只有人臉識別可用時(shí)才能進(jìn)行人臉采集。
調用人臉采集查詢(xún)接口(zoloz.identification.user.web.query)獲取人臉照片。以下請求示例代碼以JAVA為例:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest();request.setBizContent("{" +""biz_id":"5456897876546767654"," +""zim_id":"731be7f204a962b0486a9b64ea3050ae"," +""extern_param":"{"bizType":"1"}"" +"}");ZolozIdentificationUserWebQueryResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("調用成功");} else {System.out.println("調用失敗");}undefined
成功響應的示例
如果采集成功,則imgStr對象中的值為人臉照片的base64編碼字符串。
{ "zoloz_identification_user_web_query_response": { "code": "10000", "msg": "Success", "extern_info": "{"imgStr":"ApA4VVwOP1rqp8sotrcimna3c__9k","bizId":"5456897876546767654-doucao.wjp","zimMsg":"成功","zimCode":"Z5130"}" }, "sign": "SL1dSiE6XKKIta5w3ge3VSZE+71CdBtr8Ocw9WvRSZD3Tz6/vNaA2pWLBYdZcvrAHaMYa6J8V9c4nY3kdBK0EeU2afh+8CLTw6dnZfkO8tR5NOtJUb+M6qhxl0xKhpE+2GUonpCcJg1MHS0aMVXa/b6dhK/yZJQCdO1YnVNuzs8="}
失敗響應示例
{ "zoloz_identification_user_web_query_response": { "code": "40004", "msg": "Business Failed", "sub_code": "INVALID_PARAMETER", "sub_msg": "參數有誤抱歉,系統出錯了,請您稍后再試 (Z5132)" }, "sign": "v/DjkviKs2ja3HO9ZZ94W8bcfAsLyRuGrZT/TlFm6FgGQv4qSm/94o1FjOaMCl/t8XIm89bBhk03PBJ099alDzjnj4RD6S9FYDV7CfjvHYjrzvVJzn47Gc1mWdOHZ38DFQLWIg1IbNKFmYdoR+NdY5nY/cwz3Al2wfEylvN1cbs="}
API列表
接口英文名稱(chēng)
接口說(shuō)明
我的.ap.faceVerify
人臉合集
zoloz.identification.user.web.query
人臉采集結果查詢(xún)
常見(jiàn)問(wèn)題:如果一個(gè)用戶(hù)有多個(gè)支付寶賬戶(hù),調用人臉識別驗證接口時(shí)返回的user_id是否相同?
A:首先返回用戶(hù)上次使用的支付寶賬號對應的user_id。
Q:真機調試報錯 "retMessageSub":"{"error":4,"errorMessage":"Not authorized to call","message":"Not authorized to call","signature"怎么辦: “N22104”}?
A:人臉抓拍功能需要在小程序后臺添加人臉抓拍功能包并簽約使用。請參考此文檔訪(fǎng)問(wèn)指南
解決方案:可視化采集器(智能化采集)
目錄:
1、視覺(jué)采集軟件
使用CSS選擇器的采集軟件可以準確的提取我們的網(wǎng)頁(yè)元素。從用戶(hù)體驗的角度來(lái)看,XPATH有一個(gè)可視化的操作頁(yè)面,讓我們上手非常容易,但是為什么CSS選擇器一直被我們的采集軟件占用,雖然CSS的使用比較復雜,但是可以準確的捕捉一些元素XPATH 無(wú)法定位的文件。
2.可視化數據采集
所以大部分采集軟件都是XPATH和CSS并存
3、智能采集系統
從網(wǎng)頁(yè)元素提取的角度來(lái)看,CSS選擇器和XPath選擇器是一樣的。它們都幫助我們定位網(wǎng)頁(yè)中的相關(guān)元素,只是在語(yǔ)法表達上有所區別。從用戶(hù)的角度來(lái)看,通過(guò)視覺(jué)抓取頁(yè)面,我們可以完成80%以上的網(wǎng)站宣傳頁(yè)面數據抓取,少部分可以通過(guò)CSS選擇器來(lái)補充。兩個(gè)選擇器的組合使我們能夠覆蓋各種類(lèi)型的網(wǎng)頁(yè)。
4、智能信息采集
5、智能采集設備
在搜索結果中查看網(wǎng)頁(yè)時(shí),我們注意到它們在鏈接下方收錄
一小段信息。這稱(chēng)為“描述”。描述是 SEO 的有用工具。簡(jiǎn)短、朗朗上口的描述有助于說(shuō)服用戶(hù)點(diǎn)擊文章。雖然元描述并非我們網(wǎng)站的所有 SEO 方面都是最終的,但最好將它們分類(lèi)以防止出現任何錯誤。
6、智能采集攝像系統
它們需要有特定的長(cháng)度才能在搜索引擎結果中完整顯示,并且它們需要對每個(gè)頁(yè)面和 關(guān)鍵詞 都是唯一的
7.實(shí)時(shí)采集可視化工具
優(yōu)化我們的內容,當我們制定內容 SEO 策略時(shí),我們可能認為越多越好。定期發(fā)布新內容有助于吸引新訪(fǎng)問(wèn)者訪(fǎng)問(wèn)我們的網(wǎng)站并保持人們的參與度。然而,大多數時(shí)候,答案不是數量,而是質(zhì)量。
8.數據采集
和可視化
這就是內容優(yōu)化發(fā)揮作用的地方。這是查看我們網(wǎng)站上現有內容并詢(xún)問(wèn)“我如何才能更好地優(yōu)化它?”的過(guò)程。這通常并不意味著(zhù)重寫(xiě)整篇文章。相反,它涉及考慮內容的某些方面。我們是否選擇了正確的字數?查看涵蓋同一主題的成功文章并檢查其字數。
9.如何持續采集
可視化
10、智能數據采集控制器
我們是否盡可能有效地使用 關(guān)鍵詞?找到合適的 關(guān)鍵詞 是內容營(yíng)銷(xiāo)的重要組成部分。但密度也很重要。確保避免過(guò)度使用 關(guān)鍵詞。關(guān)鍵詞 的更多實(shí)例并不意味著(zhù)它的排名更好 - 事實(shí)上恰恰相反。
我們是否涵蓋相關(guān)主題?最好的文章涵蓋多個(gè)用戶(hù)查詢(xún)。查找其他相關(guān)主題以收錄
在我們的文章中。在我們花時(shí)間優(yōu)化一個(gè)頁(yè)面之后,我們會(huì )想知道它的表現如何。SEO Tools 的 CSS 文章抓取軟件使我們能夠訪(fǎng)問(wèn) SEO?;顒?dòng)進(jìn)度更新。
我們可能已經(jīng)努力為我們的網(wǎng)站創(chuàng )建內容,但如果我們要獲得 SEO 回報,用戶(hù)需要堅持下去。搜索引擎將“停留時(shí)間”描述為其主要的 SEO 優(yōu)先事項之一。顧名思義,這是用戶(hù)停留在頁(yè)面上并閱讀它的時(shí)候。文章時(shí)間
結合CSS選擇器和XPATH選擇器的文章合集軟件分享到此結束。通過(guò)簡(jiǎn)單準確的網(wǎng)頁(yè)內容提取,我們可以快速獲取我們需要的公共數據和內容,從而提高我們的工作效率。如果你喜歡這篇文章,不妨采集
點(diǎn)贊。您的支持是博主不斷更新的動(dòng)力。
主題測試文章,僅供測試使用。發(fā)布者:小新SEO,轉載請注明出處: 查看全部
解決方案:支付寶小程序:人臉采集
產(chǎn)品描述
人臉識別是公共服務(wù)場(chǎng)所提高業(yè)務(wù)效率和用戶(hù)體驗的新途徑。人臉采集是指在獲得用戶(hù)充分授權認可、充分保護用戶(hù)隱私的前提下,獲取符合質(zhì)量要求的活人。人臉圖片用于后續比對、識別等操作,提升商戶(hù)服務(wù)質(zhì)量。核心功能包括:
用戶(hù)界面
調用過(guò)程
應用場(chǎng)景
人臉應用廣泛,可應用于以下場(chǎng)景:
場(chǎng)景
描述
拍攝證件照
小程序提供拍攝證件照的功能,光線(xiàn)角度好。
團餐
在校園點(diǎn)餐場(chǎng)景中,錄入學(xué)生人臉,用于刷臉點(diǎn)餐。
不建議使用通過(guò)人臉采集小程序返回給開(kāi)發(fā)者的真人照片與開(kāi)發(fā)者自己的比對源圖在安全性較差的比對算法下進(jìn)行身份驗證。如果開(kāi)發(fā)者需要驗證身份,請使用支付寶身份驗證?或其他開(kāi)放通道人臉認證產(chǎn)品。由于支付寶身份驗證產(chǎn)品擁有完備的風(fēng)控體系和更安全的后臺活體檢測算法,具有非常強的抗攻擊和防誤識別能力。
注意:
小程序“人臉認證”開(kāi)放能力全面升級為“支付寶認證”,推薦開(kāi)發(fā)者使用“支付寶認證”能力;已簽約上線(xiàn)“人臉認證”的小程序可繼續使用。
訪(fǎng)問(wèn)要求
注意:
計費方式
自由的
接入指南第一步:創(chuàng )建小程序
要在您的小程序中使用人臉抓拍功能,您需要先完成開(kāi)發(fā)者注冊并創(chuàng )建一個(gè)小程序。
第二步:添加功能
小程序創(chuàng )建完成后,開(kāi)發(fā)者可以在“能力列表”部分點(diǎn)擊“添加能力”,為創(chuàng )建的小程序添加能力,如下圖;開(kāi)發(fā)者勾選人臉采集能力后,點(diǎn)擊右下角的確定完成添加。
第三步:承包能力
人臉采集功能需要簽名才能生效。請點(diǎn)擊功能列表右側的“立即注冊”。簽約成功后,狀態(tài)會(huì )置為“Active”,即可調用人臉采集接口。
第四步:集成并配置SDK
服務(wù)端SDK需要商家在自己的服務(wù)端系統中集成,用于后續服務(wù)端接口調用。
下載服務(wù)端SDK

為了方便開(kāi)發(fā)者調用開(kāi)放接口,我們提供開(kāi)放平臺服務(wù)端SDK,包括JAVA、PHP、NodeJS、Python、.NET五種語(yǔ)言,封裝了簽名&驗證、HTTP接口請求等基礎功能,請下載相應語(yǔ)言版本的SDK并導入到您的開(kāi)發(fā)項目中。
接口調用配置
在調用 SDK 之前需要對其進(jìn)行初始化。以JAVA代碼為例:
AlipayClient alipayClient = new DefaultAlipayClient(URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE);
關(guān)鍵參數說(shuō)明:
配置參數
示例值解釋
如何獲取/示例值
網(wǎng)址
支付寶網(wǎng)關(guān)(固定)
APPID
創(chuàng )建應用后生成APPID
獲取查看創(chuàng )建應用程序
APP_PRIVATE_KEY
開(kāi)發(fā)者私鑰,由開(kāi)發(fā)者自己生成
獲取配置密鑰
格式
參數返回格式,只支持json
json(固定)
字符集
編碼集,支持GBK/UTF-8
開(kāi)發(fā)者根據實(shí)際工程代碼進(jìn)行配置
ALIPAY_PUBLIC_KEY
支付寶公鑰,由支付寶生成
有關(guān)詳細信息,請參閱配置密鑰
SIGN_TYPE
商戶(hù)生成簽名串使用的簽名算法類(lèi)型。目前支持RSA2和RSA,推薦使用RSA2
RSA2
接下來(lái)就可以使用alipayClient來(lái)調用具體的API了。AlipayClient只需要初始化一次,后續調用不同的API可以使用同一個(gè)alipayClient對象。
注意:
ISV/開(kāi)發(fā)者可以通過(guò)第三方應用授權獲取商家授權令牌(app_auth_token)作為請求參數,實(shí)現代表商家發(fā)起請求的能力。
第五步:調用接口

調用流程圖
調用 JSAPI (faceVerify) 調用人臉采集。整個(gè)采集過(guò)程完全由人臉執行。采集完成后,通過(guò)回調函數返回采集結果。在采集過(guò)程中,客戶(hù)端完成人臉采集過(guò)程和活體檢測,然后將采集到的人臉特征數據上傳到服務(wù)器進(jìn)行進(jìn)一步的活體檢測,最后將采集結果返回給客戶(hù)端。
調用查詢(xún)接口(zoloz.identification.user.web.query)獲取可信的采集結果。如果采集成功,可以通過(guò)該接口獲取采集到的人臉照片。
主要步驟
版本要求:
調用接口my.ap.faceVerify,傳入參數bizId和bizType,即可觸發(fā)人臉采集。采集完成后,通過(guò)回調函數獲取采集結果。
請注意,在 my.ap.faceVerify 調用返回之前,切記不要發(fā)起第二次 faceVerify 調用,否則會(huì )產(chǎn)生異常。例如,如果您的小程序通過(guò)單擊頁(yè)面上的按鈕觸發(fā)對 my.ap.faceVerify 的調用,請確保在調用返回之前禁用該按鈕,以防止用戶(hù)進(jìn)行多次單擊。
代碼示例
my.ap.faceVerify({ bizId: '545689787654767653', //業(yè)務(wù)流水號,商戶(hù)自行生成,需要保證唯一性,不超過(guò)64位 bizType: '1', //業(yè)務(wù)場(chǎng)景參數,‘1’代表人臉采集,請務(wù)必填寫(xiě) useBackCamera: true, //傳入此參數會(huì )喚起后置攝像頭;非必填,不傳默認喚起前置攝像頭 success: (res) => { my.alert({ content: JSON.stringify(res), }); }, fail: (res) => { my.alert({ content: JSON.stringify(res), }); }});
成功認證結果示例
faceRetCode = 1000表示人臉采集成功,調用查詢(xún)接口(zoloz.identification.user.web.query)可以成功獲取照片,證明人臉采集成功。
{ faceRetCode: "1000", retCode: "OK_SUCCESS", retCodeSub: "Z5100", retMessageSub: "成功 (Z5100)", zimId: "7b6b72be1493cab72dd0a25877de329dd00"}undefined
注意retCode表示人臉識別可用成功,只有人臉識別可用時(shí)才能進(jìn)行人臉采集。
調用人臉采集查詢(xún)接口(zoloz.identification.user.web.query)獲取人臉照片。以下請求示例代碼以JAVA為例:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");ZolozIdentificationUserWebQueryRequest request = new ZolozIdentificationUserWebQueryRequest();request.setBizContent("{" +""biz_id":"5456897876546767654"," +""zim_id":"731be7f204a962b0486a9b64ea3050ae"," +""extern_param":"{"bizType":"1"}"" +"}");ZolozIdentificationUserWebQueryResponse response = alipayClient.execute(request);if(response.isSuccess()){System.out.println("調用成功");} else {System.out.println("調用失敗");}undefined
成功響應的示例
如果采集成功,則imgStr對象中的值為人臉照片的base64編碼字符串。
{ "zoloz_identification_user_web_query_response": { "code": "10000", "msg": "Success", "extern_info": "{"imgStr":"ApA4VVwOP1rqp8sotrcimna3c__9k","bizId":"5456897876546767654-doucao.wjp","zimMsg":"成功","zimCode":"Z5130"}" }, "sign": "SL1dSiE6XKKIta5w3ge3VSZE+71CdBtr8Ocw9WvRSZD3Tz6/vNaA2pWLBYdZcvrAHaMYa6J8V9c4nY3kdBK0EeU2afh+8CLTw6dnZfkO8tR5NOtJUb+M6qhxl0xKhpE+2GUonpCcJg1MHS0aMVXa/b6dhK/yZJQCdO1YnVNuzs8="}
失敗響應示例
{ "zoloz_identification_user_web_query_response": { "code": "40004", "msg": "Business Failed", "sub_code": "INVALID_PARAMETER", "sub_msg": "參數有誤抱歉,系統出錯了,請您稍后再試 (Z5132)" }, "sign": "v/DjkviKs2ja3HO9ZZ94W8bcfAsLyRuGrZT/TlFm6FgGQv4qSm/94o1FjOaMCl/t8XIm89bBhk03PBJ099alDzjnj4RD6S9FYDV7CfjvHYjrzvVJzn47Gc1mWdOHZ38DFQLWIg1IbNKFmYdoR+NdY5nY/cwz3Al2wfEylvN1cbs="}
API列表
接口英文名稱(chēng)
接口說(shuō)明
我的.ap.faceVerify
人臉合集
zoloz.identification.user.web.query
人臉采集結果查詢(xún)
常見(jiàn)問(wèn)題:如果一個(gè)用戶(hù)有多個(gè)支付寶賬戶(hù),調用人臉識別驗證接口時(shí)返回的user_id是否相同?
A:首先返回用戶(hù)上次使用的支付寶賬號對應的user_id。
Q:真機調試報錯 "retMessageSub":"{"error":4,"errorMessage":"Not authorized to call","message":"Not authorized to call","signature"怎么辦: “N22104”}?
A:人臉抓拍功能需要在小程序后臺添加人臉抓拍功能包并簽約使用。請參考此文檔訪(fǎng)問(wèn)指南
解決方案:可視化采集器(智能化采集)
目錄:
1、視覺(jué)采集軟件
使用CSS選擇器的采集軟件可以準確的提取我們的網(wǎng)頁(yè)元素。從用戶(hù)體驗的角度來(lái)看,XPATH有一個(gè)可視化的操作頁(yè)面,讓我們上手非常容易,但是為什么CSS選擇器一直被我們的采集軟件占用,雖然CSS的使用比較復雜,但是可以準確的捕捉一些元素XPATH 無(wú)法定位的文件。
2.可視化數據采集
所以大部分采集軟件都是XPATH和CSS并存
3、智能采集系統
從網(wǎng)頁(yè)元素提取的角度來(lái)看,CSS選擇器和XPath選擇器是一樣的。它們都幫助我們定位網(wǎng)頁(yè)中的相關(guān)元素,只是在語(yǔ)法表達上有所區別。從用戶(hù)的角度來(lái)看,通過(guò)視覺(jué)抓取頁(yè)面,我們可以完成80%以上的網(wǎng)站宣傳頁(yè)面數據抓取,少部分可以通過(guò)CSS選擇器來(lái)補充。兩個(gè)選擇器的組合使我們能夠覆蓋各種類(lèi)型的網(wǎng)頁(yè)。
4、智能信息采集

5、智能采集設備
在搜索結果中查看網(wǎng)頁(yè)時(shí),我們注意到它們在鏈接下方收錄
一小段信息。這稱(chēng)為“描述”。描述是 SEO 的有用工具。簡(jiǎn)短、朗朗上口的描述有助于說(shuō)服用戶(hù)點(diǎn)擊文章。雖然元描述并非我們網(wǎng)站的所有 SEO 方面都是最終的,但最好將它們分類(lèi)以防止出現任何錯誤。
6、智能采集攝像系統
它們需要有特定的長(cháng)度才能在搜索引擎結果中完整顯示,并且它們需要對每個(gè)頁(yè)面和 關(guān)鍵詞 都是唯一的
7.實(shí)時(shí)采集可視化工具
優(yōu)化我們的內容,當我們制定內容 SEO 策略時(shí),我們可能認為越多越好。定期發(fā)布新內容有助于吸引新訪(fǎng)問(wèn)者訪(fǎng)問(wèn)我們的網(wǎng)站并保持人們的參與度。然而,大多數時(shí)候,答案不是數量,而是質(zhì)量。
8.數據采集
和可視化
這就是內容優(yōu)化發(fā)揮作用的地方。這是查看我們網(wǎng)站上現有內容并詢(xún)問(wèn)“我如何才能更好地優(yōu)化它?”的過(guò)程。這通常并不意味著(zhù)重寫(xiě)整篇文章。相反,它涉及考慮內容的某些方面。我們是否選擇了正確的字數?查看涵蓋同一主題的成功文章并檢查其字數。
9.如何持續采集
可視化

10、智能數據采集控制器
我們是否盡可能有效地使用 關(guān)鍵詞?找到合適的 關(guān)鍵詞 是內容營(yíng)銷(xiāo)的重要組成部分。但密度也很重要。確保避免過(guò)度使用 關(guān)鍵詞。關(guān)鍵詞 的更多實(shí)例并不意味著(zhù)它的排名更好 - 事實(shí)上恰恰相反。
我們是否涵蓋相關(guān)主題?最好的文章涵蓋多個(gè)用戶(hù)查詢(xún)。查找其他相關(guān)主題以收錄
在我們的文章中。在我們花時(shí)間優(yōu)化一個(gè)頁(yè)面之后,我們會(huì )想知道它的表現如何。SEO Tools 的 CSS 文章抓取軟件使我們能夠訪(fǎng)問(wèn) SEO?;顒?dòng)進(jìn)度更新。
我們可能已經(jīng)努力為我們的網(wǎng)站創(chuàng )建內容,但如果我們要獲得 SEO 回報,用戶(hù)需要堅持下去。搜索引擎將“停留時(shí)間”描述為其主要的 SEO 優(yōu)先事項之一。顧名思義,這是用戶(hù)停留在頁(yè)面上并閱讀它的時(shí)候。文章時(shí)間
結合CSS選擇器和XPATH選擇器的文章合集軟件分享到此結束。通過(guò)簡(jiǎn)單準確的網(wǎng)頁(yè)內容提取,我們可以快速獲取我們需要的公共數據和內容,從而提高我們的工作效率。如果你喜歡這篇文章,不妨采集
點(diǎn)贊。您的支持是博主不斷更新的動(dòng)力。
主題測試文章,僅供測試使用。發(fā)布者:小新SEO,轉載請注明出處:
解決方案:labview100個(gè)實(shí)例之簡(jiǎn)單采集(2)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 137 次瀏覽 ? 2022-11-23 08:27
目錄
提示:文章寫(xiě)完后,目錄可以
前言
之前做過(guò)一個(gè)很簡(jiǎn)單的程序,但總覺(jué)得不能體現labview真正的特點(diǎn),所以打算做一個(gè)系列,讓一些初學(xué)者容易理解這些。首先是模塊化和功能封裝的概念。
1.例子
這是一個(gè)完整的主程序框圖,可以清楚的看到分為兩大區域——“參數”設置區和“主界面”。主界面收錄
四個(gè)區域,分別是修改頻率較高的參數區、控制區(啟停)、狀態(tài)區和顯示區。用于采集一段時(shí)間內的聲音和電流信號。
運行效果為:
設置采集條件和數據存儲路徑,通過(guò)按鈕控制采集的開(kāi)始,程序按照指定的采樣率采集一段時(shí)間的信號并保存時(shí)域數據(原創(chuàng )
數據,方便后期數據處理)。如果可能,你可以嘗試運行一下來(lái)測試一下效果。
模塊化與功能封裝.zip-MCU文檔資源-CSDN文庫
2. 模塊化與功能封裝 1. 模塊化
Labview的一大特點(diǎn)是程序往往以模塊化的方式構建,也就是常說(shuō)的子VI。
2.功能封裝
如圖所示,此時(shí)我們說(shuō)這個(gè)程序使用了三個(gè)子VI,分別封裝了采集、回放、存儲三個(gè)功能。
在制作子VI時(shí),需要明確需要封裝的函數,輸入輸出的數據類(lèi)型。在保證通用性的前提下,主程序框圖應該是最簡(jiǎn)潔的。
總結
本例主要是簡(jiǎn)單說(shuō)明Labview中子VI的功能以及函數封裝的方便性。當我們創(chuàng )建一個(gè)子VI并賦予它特定的功能時(shí),我們可以很方便地在項目的任何地方調用它,而不需要再次編輯重復的代碼。
特別注意的是,當一個(gè)子VI被我們封裝后,理論上我們可以直接在本程序中調用。但往往在一個(gè)大型項目中,一些子VI因為其功能而被頻繁使用,我們需要考慮是否要重復調用它們。重復調用是指我們在某個(gè)時(shí)間多次調用同一個(gè)子VI,程序會(huì )等待并逐次執行每次調用,導致程序運行時(shí)間發(fā)生變化甚至數據沖突(因為一般一個(gè)子VI計算機只分配一塊內存空間 同時(shí)調用時(shí),我們不知道誰(shuí)先調用并輸出結果)。
我們可以在VI的屬性——“執行”欄中將VI設置為可重入VI。這樣,程序運行時(shí),當在多個(gè)地方同時(shí)調用這個(gè)VI時(shí),會(huì )創(chuàng )建不同的工作區,多個(gè)調用者的數據會(huì )分別存儲,不會(huì )發(fā)生沖突和干擾。
★ 范例中提到的結構、文件、信號處理和信號分析的范例版本及后續計劃為17版本,如需降級請及時(shí)聯(lián)系我們。
解決方案:采購內容及技術(shù)要求
一、采購要求
一、項目建設背景
政府網(wǎng)站是現代政府在信息化條件下政府密切聯(lián)系人民群眾的重要橋梁,是網(wǎng)絡(luò )時(shí)代政府履行職責的重要平臺,是各級政府機關(guān)提供信息公開(kāi)、回應關(guān)切、辦事服務(wù)、互動(dòng)交流的重要載體。近年來(lái),黨中央、國務(wù)院、四川省政府高度重視政府網(wǎng)站建設和管理工作,先后下發(fā)了多項關(guān)于加強政府網(wǎng)站建設的管理規定。從2015年4月起,國務(wù)院開(kāi)展了全國政府網(wǎng)站普查工作,對政府網(wǎng)站的建設起到了前所未有的推動(dòng)作用。
2017年5月,《國務(wù)院辦公廳關(guān)于印發(fā)政府網(wǎng)站發(fā)展指引的通知》(國辦發(fā)〔2017〕47號)發(fā)布,對政府網(wǎng)站集約化建設提出了詳細的建設要求。德陽(yáng)市政府網(wǎng)站集約化建設項目將以此為依據,并根據《四川省人民政府辦公廳關(guān)于加強政府網(wǎng)站信息內容建設的實(shí)施意見(jiàn)》(川辦發(fā)〔2015〕53號)和《德陽(yáng)市人民政府辦公室關(guān)于進(jìn)一步做好“互聯(lián)網(wǎng)+政務(wù)服務(wù)”有關(guān)工作的通知》(德辦函〔2016〕99號)以及政府網(wǎng)站績(jì)效考核的要求,以問(wèn)題和需求為導向,以為民服務(wù)為根本宗旨,順應公眾的期盼,按照利企便民的原則,樹(shù)立“以信息公開(kāi)為基礎、公共服務(wù)為核心”的理念,積極推進(jìn)政府網(wǎng)站集約化平臺建設、應用新技術(shù)拓展服務(wù)渠道,以增強網(wǎng)站用戶(hù)體驗、提高辦事服務(wù)、實(shí)現信息共享,為公眾提供優(yōu)質(zhì)、便捷、高效服務(wù)。
二、項目建設目標
根據國家和四川省政府網(wǎng)站績(jì)效考核指標及其他相關(guān)政策文件中對“互聯(lián)網(wǎng)+”環(huán)境下政府網(wǎng)站的定位,借鑒國內外領(lǐng)先政府網(wǎng)站的先進(jìn)經(jīng)驗和趨勢特點(diǎn),以“技術(shù)先進(jìn)、功能完備、服務(wù)智能、安全穩定”為建設原則,著(zhù)重新技術(shù)應用,基于大數據平臺,采用移動(dòng)互聯(lián)網(wǎng)等技術(shù)手段,建設德陽(yáng)智慧型、實(shí)用化、個(gè)性化、集約化網(wǎng)站群管理平臺,最終實(shí)現德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站、40個(gè)市級部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)、6個(gè)縣(市、區)政府門(mén)戶(hù)網(wǎng)站的集約化建設工作。建設總體目標如下:
?。? 加強信息資源整合,搭建全市統一的政府網(wǎng)站信息資源庫,有效管理全市政府網(wǎng)站信息資源。
?。? 建立信息支撐體系,提供網(wǎng)站信息采集技術(shù),豐富網(wǎng)站信息供給手段。能夠通過(guò)集約化平臺集中實(shí)現采集、發(fā)布信息和數據,實(shí)現主站與子站、子站與子站、子站與欄目和市級部門(mén)子站與縣級部門(mén)專(zhuān)欄等之間的互聯(lián)互通、信息復用,為信息公開(kāi)提供平臺支撐,充分發(fā)揮政府網(wǎng)站在政務(wù)公開(kāi)中第一平臺的作用。
?。? 加強網(wǎng)站智能化建設,提供智能搜索、智能問(wèn)答、智能推薦和無(wú)障礙訪(fǎng)問(wèn)等功能??筛鶕脩?hù)需求調整搜索排序、聚合相關(guān)服務(wù)等,實(shí)現“搜索即服務(wù)”。主動(dòng)為社會(huì )公眾提供智能、實(shí)用、便捷、精準、高效的網(wǎng)站服務(wù),提升政府網(wǎng)站的公共服務(wù)能力和水平。
?。? 建立健全網(wǎng)站內容保障監管體系,加強網(wǎng)站的運維、監管手段,提供切實(shí)有效的網(wǎng)站運維、監管能力,及時(shí)發(fā)現網(wǎng)站存在的問(wèn)題。保證網(wǎng)站運行安全、穩定,服務(wù)內容全面、準確。
?。? 提供統一、完善的網(wǎng)站互動(dòng)交流功能,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。
6. 注重政務(wù)微博、微信等互聯(lián)網(wǎng)新技術(shù)的應用,加強對移動(dòng)終端應用功能的支持,豐富公眾訪(fǎng)問(wèn)渠道,有效提高用戶(hù)體驗。
7.能夠通過(guò)“深度鏈接”、各類(lèi)接口整合等方式,實(shí)現全市統一的辦事服務(wù)入口和數據開(kāi)放入口;與有效與四川省政府信息公開(kāi)目錄管理系統、四川省一體化政務(wù)服務(wù)平臺、德陽(yáng)市政務(wù)信息資源共享平臺等進(jìn)行整合和對接,最終實(shí)現平臺互聯(lián)互通、信息資源共享。
8.圍繞2018年國家和四川省政府網(wǎng)站績(jì)效評估指標體系,對網(wǎng)站建設進(jìn)行升級優(yōu)化,提升德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站排名,力爭進(jìn)入省內前10名;加強網(wǎng)站建設的方向性引導、有效激勵服務(wù)改進(jìn)措施,保障網(wǎng)站持續發(fā)展。
三、總體技術(shù)要求
?。ㄒ唬┸浖a(chǎn)品技術(shù)要求
1.本次項目的投標商必須采用先進(jìn)且成熟的技術(shù)和產(chǎn)品,主要產(chǎn)品應具有云平臺部署成功案例。
2.軟件產(chǎn)品應具有網(wǎng)站集群化平臺建設能力。
3.系統需支持大量用戶(hù)訪(fǎng)問(wèn)和海量數據的存儲、檢索和管理,平臺功能部署靈活統一。
4.產(chǎn)品具有安全、可優(yōu)化、可擴展性能,易于二次開(kāi)發(fā),應免費提供接口。
5.系統應采用J2EE或其他符合行業(yè)發(fā)展方向的先進(jìn)技術(shù)架構;
6.系統應用結構體系的表示層、業(yè)務(wù)層、數據層、訪(fǎng)問(wèn)層應分開(kāi),支持分布式部署,支持無(wú)限站點(diǎn)擴展;
7.系統應支持Oracle、MySQL、Microsoft SQL Server等主流數據庫系統和主要國產(chǎn)化數據庫系統;
8.網(wǎng)站系統兼容性強,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
9.系統支持雙機熱備部署模式。
?。ǘ┻\行性能指標
1. 在網(wǎng)絡(luò )穩定的環(huán)境下,系統后臺單一操作的響應時(shí)間小于3秒;網(wǎng)站頁(yè)面訪(fǎng)問(wèn)響應時(shí)間小于1秒。
2. 網(wǎng)站滿(mǎn)足并發(fā)訪(fǎng)問(wèn)用戶(hù)數不低于10000的訪(fǎng)問(wèn)請求。
3. 支持初始數據量不少于100萬(wàn)記錄數,支持表空間自動(dòng)擴充。
4. 系統能夠實(shí)現滿(mǎn)足網(wǎng)站面向服務(wù)的目標,最終實(shí)現服務(wù)化、構件化、松耦合的SOA體系架構。
5. 系統提供7×24小時(shí)的連續運行,平均系統年故障時(shí)間≤2個(gè)小時(shí),平均故障修復時(shí)間≤30分鐘。
6. 網(wǎng)頁(yè)代碼和標記設計盡可能簡(jiǎn)化,以節約帶寬。
7. 網(wǎng)站要提供不間斷服務(wù),支持信息多個(gè)站點(diǎn)同時(shí)發(fā)布功能,單個(gè)站點(diǎn)故障或更新維護等不能影響其它站點(diǎn)的正常使用。
?。ㄈ┌踩阅芤?br /> 1. 系統應支持分布式部署,系統應支持靜態(tài)頁(yè)面發(fā)布。
2. 系統應建立基于角色和工作分工的權限控制機制,重要信息需具備有效的加密方式進(jìn)行傳遞;系統應提供數據自動(dòng)非本機轉儲備份和故障恢復等應急響應功能,具備完善的日志記錄、審計和數據備份功能。
3. 具備良好的數據庫安全策略。系統安全設計符合《計算機信息系統安全保護等級劃分準則》(GB17859-1999)第三級(安全標記保護級)要求。
四、建設內容及功能性需求
此次項目招標主要目的是規劃、搭建好德陽(yáng)市政府網(wǎng)站集約化平臺,并完成“中國·德陽(yáng)”網(wǎng)的改版和40個(gè)市級政府部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)的集約化建設,但不包括德陽(yáng)市6縣(市、區)政府門(mén)戶(hù)網(wǎng)站集約化建設內容。德陽(yáng)市政府網(wǎng)站集約化平臺將部署在德陽(yáng)市政務(wù)云上。具體建設內容如下:
?。ㄒ唬┙y一用戶(hù)管理系統
將德陽(yáng)市使用站群系統的所有用戶(hù)統一管理起來(lái),實(shí)現用戶(hù)的屬性管理,并將用戶(hù)與組織機構相關(guān)聯(lián)。
用戶(hù)管理,提供對用戶(hù)的增、刪、改,可禁用和啟用用戶(hù)帳號,設置用戶(hù)擁有的功能權限;可自定義用戶(hù)組織架構;用戶(hù)組管理,提供對用戶(hù)組的增、刪、改,設置用戶(hù)組擁有的功能權限。
?。ǘ┬畔①Y源庫系統
以整合德陽(yáng)市所有政府網(wǎng)站資源實(shí)現共享為目標,建設集約化網(wǎng)站信息資源庫,實(shí)現對信息資源的統一分類(lèi)、統一展現、統一監管及各模塊之間的無(wú)縫調用,有效解決平臺建設資源共享的問(wèn)題。
1. 要求針對信息資源庫建設提出相應的解決方案和產(chǎn)品,滿(mǎn)足結構化和非結構化數據的數據庫建設。
2. 要求系統提供標準管理體系,即涵蓋已經(jīng)發(fā)布的國家標準、企業(yè)標準、行業(yè)標準和地方標準,也可以管理系統自定義的數據字典。
3. 要求系統具有資源庫管理,數據元管理,數據集管理,表單管理等數據庫基礎應用組件。
4. 要求系統提供分類(lèi)管理能力,分類(lèi)管理包括數據元分類(lèi)管理,數據分類(lèi)管理。
5. 要求系統提供資源管理能力,系統提供基本的數據錄入功能,也可以使用數據交換平臺,通過(guò)WebService或ETL工具進(jìn)行數據交換。
6. 要求系統提供共享管理能力,包括:自定義分組管理,共享維護,共享授權。共享授權實(shí)現數據分級管理,可以對用戶(hù)授權,也可以對分組授權。
7. 要求系統提供系統管理能力,包括用戶(hù)管理,角色管理,授權管理,日志管理。
?。ㄈ┘s化網(wǎng)站監管平臺
以“統一標準體系、統一技術(shù)平臺、統一安全防護、統一運維監管,集中管理信息數據,集中提供內容服務(wù)”為目標,結合網(wǎng)站屬地化管理體系,建設德陽(yáng)市政府網(wǎng)站集約化管理平臺,實(shí)現站點(diǎn)管理、規范性檢查、網(wǎng)站普查指標自檢、網(wǎng)站訪(fǎng)問(wèn)監控、網(wǎng)站維護監控、網(wǎng)站運行監控等功能,滿(mǎn)足網(wǎng)站集約化統一管理要求。具體功能如下:
1.站點(diǎn)監管
(1)提供站群系統內各子站基本信息管理功能,包括管理的站點(diǎn)名稱(chēng)、站點(diǎn)域名、站點(diǎn)描述信息、主辦單位及聯(lián)系人信息、網(wǎng)站備案信息等。
(2)按照《政府網(wǎng)站發(fā)展指引》要求提供各項網(wǎng)站規范性的監測功能,包括名稱(chēng)規范、域名規范、備案信息規范、模板規范、標簽規范、欄目規范等一致性檢查、冗余檢查、屬地化監測等。
2.網(wǎng)站普查指標監測
根據網(wǎng)站普查要求,提供網(wǎng)站指標監測功能,包括網(wǎng)站可用性監測、存在錯誤頁(yè)面分析、頁(yè)面關(guān)聯(lián)分析、空白欄目監測、欄目更新頻率監測、網(wǎng)站外鏈監測、敏感詞及錯別字掃描等。
3.網(wǎng)站訪(fǎng)問(wèn)監測
根據網(wǎng)站實(shí)際運行情況,可數字化或圖表化展現網(wǎng)站運行監控的各項訪(fǎng)問(wèn)指標,可對指定時(shí)間段的訪(fǎng)問(wèn)情況進(jìn)行統計、分析,并能生成統計分析報告(表)進(jìn)行打印或導出。監測功能及內容如下:
(1)搜索引擎監控:包括訪(fǎng)問(wèn)人次、站內搜索次數、搜索結果點(diǎn)擊次數、搜索結果點(diǎn)擊率、搜索引擎排行、網(wǎng)站檢索詞排行等。
(2)網(wǎng)站訪(fǎng)問(wèn)監控:包括訪(fǎng)問(wèn)渠道、瀏覽量、訪(fǎng)客數、平均停留時(shí)間、日訪(fǎng)問(wèn)變化趨勢圖等;
(3)瀏覽頁(yè)數性能監控:包括系統連接時(shí)間、響應時(shí)間、下載時(shí)間以及無(wú)法訪(fǎng)問(wèn)次數等;
(4)智能報警策略:包括故障的持續時(shí)間、問(wèn)題嚴重性分級、分類(lèi)報警,報警通知方式支持郵件、短信等。
4.網(wǎng)站維護監測
(1)針對網(wǎng)站內容管理進(jìn)行數據分析,包括網(wǎng)站欄目(欄目訪(fǎng)問(wèn)量、欄目信息量、欄目參與部門(mén)數和欄目參與人員數等)、部門(mén)信息(部門(mén)信息發(fā)布量、部門(mén)業(yè)務(wù)辦理量和部門(mén)業(yè)務(wù)辦結率等)和公共訴求(訴求目的、訴求內容分類(lèi)、處理單位、滿(mǎn)意度等)等數據的統計分析功能。
(2)提供系統站內通知功能,可對系統內各用戶(hù)發(fā)送消息,解決系統管理人員日常工作溝通及信息共享。
5.網(wǎng)站運行檢測
(1)支持對服務(wù)器硬件層進(jìn)行監控,包括服務(wù)器的工作狀態(tài)、處理器、內存、進(jìn)程等。
(2)提供靈活、全面、便捷的監控方式,監管頁(yè)面秒級刷新,運行高效、安全可靠。
6.系統日志管理
提供系統日志的管理界面,能詳細記錄系統操作日志,并形成日志信息或日志文件,可對日志文件進(jìn)行導出。
?。ㄋ模┚W(wǎng)站群管理平臺
以站點(diǎn)管理為重點(diǎn),支持集中式建設部署和分布式管理維護。
支持對歷史信息的調入、調出,提供對信息的全流程跟蹤管理。
支持與其它平臺的無(wú)縫對接。系統接口可開(kāi)放,支持網(wǎng)站擴展功能模塊的安裝調試,具有高集成、可擴展、易管理等特性。
采用XML、WebService等標準,提供組件化的統一數據接口,有效實(shí)現信息的采集、聚合。
1.站群管理系統
(1)要求實(shí)現頁(yè)面展現與信息分離,刪除或修改網(wǎng)頁(yè)模板時(shí)不會(huì )對信息造成影響。
(2)站群管理系統支持站群下所有子站點(diǎn)的創(chuàng )建、修改、暫停、刪除及服務(wù)器資源配置。
(3)系統提供多級授權分層管理機制,每個(gè)子站點(diǎn)都提供獨立的站點(diǎn)管理功能,站點(diǎn)管理人員能夠對子站點(diǎn)進(jìn)行角色權限管理、資源管理、用戶(hù)權限管理及站點(diǎn)統計等操作,保證用戶(hù)在統一的平臺下獨立管理自己的子站點(diǎn)。
(4)站群系統內各站點(diǎn)之間可以共享數據源,保證各站點(diǎn)信息的一致性。
(5)系統支持密碼強度管理、CA綁定等安全策略。
2.站點(diǎn)管理系統
(1)網(wǎng)站信息的發(fā)布具有靜態(tài)信息發(fā)布和動(dòng)態(tài)信息發(fā)布相結合的發(fā)布模式,用戶(hù)可根據實(shí)際需要選擇發(fā)布方式,以同時(shí)滿(mǎn)足網(wǎng)站訪(fǎng)問(wèn)速度、并發(fā)訪(fǎng)問(wèn)量及網(wǎng)站交互功能的多重需求。
(2)系統支持對多種信息格式的發(fā)布,包括音頻、視頻等多媒體格式。
(3)系統支持增量發(fā)布與完全發(fā)布,支持定時(shí)發(fā)布和立即發(fā)布,可根據需要自定義發(fā)布方式。
(4)系統提供統一用戶(hù)驗證功能,通過(guò)賬號、密碼、驗證碼相結合的方式登陸到系統管理界面。
(5)內容維護人員只能對自己權限范圍內的內容進(jìn)行管理,無(wú)權看到并操作其他用戶(hù)管理的內容。
(6)系統詳細記錄所有用戶(hù)的系統操作,以便于查詢(xún)和管理。
(7)系統提供權限組功能,具有相同權限的用戶(hù)可劃分為同一權限組。權限的分配可以詳細到每一個(gè)欄目。
(8)提供系統登陸賬號長(cháng)時(shí)間無(wú)操作的自動(dòng)注銷(xiāo)功能,可自行設置注銷(xiāo)時(shí)間。
(9)系統可根據自定義備份策略(如異地備份、定時(shí)備份等)進(jìn)行站點(diǎn)數據備份,能對備份文件進(jìn)行刪除、下載、恢復管理。
3.內容管理系統
(1)具有網(wǎng)站內容采集、在線(xiàn)編輯、審核發(fā)布、敏感詞過(guò)濾、錯別字檢測等功能,提供可視化編輯器,實(shí)現“所見(jiàn)即所得”的信息錄入、編輯效果。
(2)支持文檔錄入、發(fā)布、預覽、修改、刪除等操作,擁有豐富的文檔引用、復制、鏈接、移動(dòng)、同步等操作功能。
(3)內容編輯器具有多圖片上傳、word和pdf等文檔導入、一鍵排版、格式清理、去除空行、首行縮進(jìn)等常用功能;
(4)各子站點(diǎn)具有獨立、完善的信息采集、編發(fā)功能,可根據用戶(hù)權限進(jìn)行跨欄目、跨站點(diǎn)信息推送與共享。
(5)支持信息發(fā)布過(guò)程中的多級審核管理,能夠針對不同站點(diǎn)、不同欄目設置不同審核流程;
(6)支持前臺頁(yè)面樣式由模板進(jìn)行控制,模板提供代碼級修改,模板管理支持標簽語(yǔ)法,模板可嵌套模板,也可嵌套標簽;
(7)網(wǎng)站欄目能夠自由移動(dòng),可定制欄目信息發(fā)布類(lèi)型,可按權限獲取不同欄目、不同站點(diǎn)(如內容管理系統、信息公開(kāi)系統)的信息;
(8)信息錄入具備文章、組圖、鏈接、視頻四種類(lèi)型,能夠對普通文本、圖
片信息和音視頻等多種流媒體信息進(jìn)行發(fā)布和管理,滿(mǎn)足信息多樣化的需求;
(9)支持站點(diǎn)發(fā)布、分級欄目發(fā)布、信息單獨發(fā)布等操作,并可以指定文檔發(fā)布后在頁(yè)面顯示的順序;
(10)支持靜態(tài)發(fā)布、動(dòng)態(tài)發(fā)布和動(dòng)態(tài)靜態(tài)相結合的發(fā)布方式。
?。ㄎ澹┱畔⒐_(kāi)管理系統
根據部門(mén)業(yè)務(wù)和網(wǎng)站功能特點(diǎn)進(jìn)行科學(xué)分析、認真梳理,合理規劃頻道和欄目,與四川省政府信息公開(kāi)目錄管理系統進(jìn)行數據對接,有效實(shí)現德陽(yáng)市政府信息公開(kāi)數據在網(wǎng)站上的聚類(lèi)、共享、展示。
(1)該系統必須完全符合《政府信息公開(kāi)目錄系統實(shí)施指引(試行)》(國辦秘函[2009]6號)文件中的各項要求。
(2)要求系統提供靈活的元數據管理,以能適應不同類(lèi)型的信息記錄需要,元數據必需符合國家相關(guān)文件的要求,并具備元數據擴展功能;提供對多種類(lèi)型的元數據字段支持。定義數據層、功能層、使用層規范,同時(shí)配以編碼規則管理,支持批量修改,保持良好的擴展性;
(3)要求系統提供靈活的分類(lèi)管理,可自由地將采集到的信息進(jìn)行多渠道分類(lèi),包括主題分類(lèi)、機構分類(lèi)、體裁分類(lèi)及服務(wù)對象分類(lèi)。同時(shí)支持分類(lèi)的自由擴展。
(4)要求系統提供靈活的目錄管理功能,用戶(hù)可根據公眾的需要定義目錄的展現內容,通過(guò)定義目錄節點(diǎn)的生成規則,從而來(lái)獲取相應的數據,形成最終的人性化目錄;系統支持目錄推薦功能,即上級政府建立完成的目錄,可以作為“模板”推薦給下級單位。
(5)要求系統能夠自定義索引號編碼規則,依照信息公開(kāi)標準對信息進(jìn)行自動(dòng)編碼,生成信息索引號。當編碼規則發(fā)生修改時(shí),也可制定新規則,并批量修改信息索引號。
(6)要求系統提供良好的信息管理功能,從采集、標引、審核、發(fā)布到歸檔,完整記錄信息生命周期活動(dòng)。
(7)系統提供列表、簡(jiǎn)要、細覽等展現形式,顯示核心元數據,包括索引號、名稱(chēng)、內容概述、生成日期、文號等。
(8)系統應滿(mǎn)足信息錄入和審核權限的逐級分配,強化信息源頭管理,保障信息發(fā)布安全。
(9)系統具有依申請公開(kāi)功能,可對依申請公開(kāi)信息進(jìn)行接收、受理、審核、發(fā)布,并提供統計分析等功能,訪(fǎng)問(wèn)用戶(hù)可實(shí)時(shí)查詢(xún)依申請公開(kāi)處理狀態(tài)。
(10)要求系統提供綜合的績(jì)效評估模式,包括信息公開(kāi)工作量評估、依申
請公開(kāi)辦結率和辦結質(zhì)量評估。
?。┗?dòng)交流系統
系統嚴格遵循SOA模塊化設計思想,按照“高內聚,低耦合”原則,提供全面完善的網(wǎng)站互動(dòng)交流功能,包括領(lǐng)導信箱、民意征集、在線(xiàn)調查、咨詢(xún)投訴、網(wǎng)上信訪(fǎng)、在線(xiàn)訪(fǎng)談等,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。具體功能要求如下:
1.在線(xiàn)訪(fǎng)談系統
(1)支持圖文和視頻同步的在線(xiàn)訪(fǎng)談,要求具有文字直播、圖片直播、音頻直播及視頻直播四種功能形式;
(2)要求提供良好的人機對話(huà)界面,網(wǎng)友通過(guò)文字形式可實(shí)時(shí)提問(wèn),管理人員采集
和審核問(wèn)題,主持人轉達和引導提問(wèn),嘉賓對問(wèn)題實(shí)時(shí)解答;
(3)管理員可查看在線(xiàn)用戶(hù)情況,可以通過(guò)IP或用戶(hù)名來(lái)禁止用戶(hù)行為,可對用戶(hù)發(fā)言?xún)热菰O置過(guò)濾模式。
(4)主持人、嘉賓與網(wǎng)友的發(fā)言區要劃分明確;
(5)系統必須具有訪(fǎng)談預告功能,訪(fǎng)談預告可采用文字、圖片或視頻方式展示訪(fǎng)談背景和相關(guān)資料。
(6)訪(fǎng)談過(guò)程中要確保文字、圖片、音頻、視頻的流暢;
(7)對于歷史訪(fǎng)談,可按照日期進(jìn)行歸檔,形成歷史訪(fǎng)談目錄,網(wǎng)友可調閱歷史訪(fǎng)談。
(8)對于已經(jīng)完成的訪(fǎng)談,管理員可繼續對訪(fǎng)談內容進(jìn)行修改和編輯。
2.領(lǐng)導信箱系統
(1)系統具有工作流管理功能,可自定義信件辦理流程,實(shí)現從受理、轉辦、承辦、退回、辦結的全流程管理。
(2)系統具有信件辦理狀態(tài)實(shí)時(shí)查詢(xún)功能,來(lái)信人可根據信件編碼、姓名、聯(lián)系電話(huà)等對信件辦理狀態(tài)進(jìn)行查詢(xún),信箱管理人員可通過(guò)關(guān)鍵字、信件編碼、時(shí)間、部門(mén)、信件狀態(tài)等條件進(jìn)行查詢(xún)。
(3)前臺提供“信件選登”、“信件查詢(xún)”、“我要寫(xiě)信”等功能,寫(xiě)信內容需收錄
姓名、昵稱(chēng)、身份證號碼、聯(lián)系電話(huà)、電子郵件、信件標題、信件內容,可上傳附件材料等,具有詳實(shí)的展現形式,可對敏感詞進(jìn)行自動(dòng)屏蔽。
(4)后臺提供信件的回復、發(fā)布、選登等狀態(tài)的查看及信件辦理狀態(tài)的統計功能,提供信件的“公開(kāi)/不公開(kāi)”選項功能。
3.意見(jiàn)征集系統
(1)針對社會(huì )公眾關(guān)注的熱點(diǎn)問(wèn)題或者政策制定和工作成果開(kāi)展民意征集活動(dòng),民意征集的各個(gè)主題要求布局清晰、合理,方便閱覽;
(2)網(wǎng)友可根據征集主題的內容和背景資料發(fā)表自己的建議和觀(guān)點(diǎn),可以查看征集結果;
(3)系統后臺可實(shí)時(shí)查看所有社會(huì )公眾提交的意見(jiàn)和建議;
(4)意見(jiàn)征集結束后,前臺只保留征集主題、內容、結果,網(wǎng)友不能再進(jìn)行意見(jiàn)和建議的提交;
(5)能對網(wǎng)友發(fā)表的文字信息進(jìn)行安全性檢查。
4.網(wǎng)上調查系統
(1)管理員可根據不同的調查內容新建、修改、刪除調查問(wèn)卷。對于每個(gè)調查問(wèn)卷可以對標題、摘要、內容、選項、調查項組成結構等進(jìn)行管理,可靈活設計投票問(wèn)卷風(fēng)格;
(2)同一調查主題,可設置多個(gè)調查項;調查項應包括單選項調查、多選項調查、附加選項(填空)等調查類(lèi)型;
(3)同一IP地址在設定時(shí)間內只允許提交一次投票,杜絕惡意投票行為發(fā)生;
(4)投票結果可通過(guò)表格、柱狀圖、餅圖等形式進(jìn)行展現。
?。ㄆ撸祿杉到y
(1)數據采集系統借助先進(jìn)的信息抓取、信息分類(lèi)和信息流轉技術(shù),實(shí)現對指定網(wǎng)站信息(包括但不限于中央政府網(wǎng)站、省政府網(wǎng)站、重要新聞網(wǎng)站和平臺內外所需政府信息資源)的更新監測和有效采集。
(2)系統按照不同需要,可定點(diǎn)、定時(shí)監測和采集所需信息,并下載信息的圖片、視頻及附件等相關(guān)文件,將采集信息進(jìn)行準確分類(lèi)、整理、篩選,通過(guò)內容推送功能自動(dòng)推送到指定欄目。
(3)管理員可在后臺設置抓取的范圍、關(guān)鍵字、抓取時(shí)間等參數,系統根據設置好的抓取策略進(jìn)行信息自動(dòng)抓取。
(4)用戶(hù)可對采集到的信息按照日期、來(lái)源、標題進(jìn)行檢索、瀏覽;可以對信息內容與圖片分類(lèi)保存,支持信息分類(lèi)的自定義。
(5)系統支持將網(wǎng)頁(yè)中的信息內容按標題、作者、欄目、內容等進(jìn)行提??;自動(dòng)過(guò)濾網(wǎng)頁(yè)中的無(wú)用信息、廣告圖片等,自動(dòng)過(guò)濾重復的信息。
(6)對采集的信息可進(jìn)行二次編輯、審核,可向網(wǎng)站群內各個(gè)子站欄目進(jìn)行發(fā)布。
?。ò耍o(wú)障礙瀏覽系統
(1)面向聽(tīng)力、視力等有障礙的特殊人群提供縮放字體、縮放頁(yè)面、輔助光標、文本化網(wǎng)頁(yè)和語(yǔ)音個(gè)性化調整等輔助瀏覽功能。
(2)具有全程自動(dòng)語(yǔ)音提示、全程語(yǔ)音導航交互、光標語(yǔ)音指讀與連讀、文
字放大閱讀專(zhuān)用屏、網(wǎng)頁(yè)圖文放大縮小、高對比閱讀配色器、閱讀輔助光標等功能。
(3)系統需界面友好、易操作,無(wú)需安裝插件,支持各種主流瀏覽器。
?。ň牛┲悄軝z索系統
(1)提供專(zhuān)業(yè)的政府網(wǎng)站檢索功能,對政府網(wǎng)站檢索進(jìn)行分類(lèi)引導,按照政策法規、辦事事項、政府文件、新聞咨詢(xún)等類(lèi)別對用戶(hù)檢索內容進(jìn)行歸類(lèi)整理,清晰引導用戶(hù)進(jìn)行查閱。
(2)數據檢索范圍應包括站群內各業(yè)務(wù)部門(mén)、各縣(市、區)網(wǎng)站站點(diǎn),可對不同類(lèi)型數據源的數據進(jìn)行檢索。
(3)滿(mǎn)足即搜即用原則,支持圖片、視頻格式信息的檢索。
(4)支持關(guān)鍵字搜索、日期搜索。要求提供個(gè)性化檢索結果功能,如檢索結果分類(lèi)導航展現、檢索結果按不同維度(可以按系統,站點(diǎn),欄目,區縣,文檔類(lèi)型,時(shí)間單位,相似度等)過(guò)濾展示,檢索結果可進(jìn)行二次搜索。
(5)具有搜索關(guān)鍵詞自動(dòng)補全能力,動(dòng)態(tài)分析公眾搜索關(guān)鍵詞,按照關(guān)鍵詞的內在邏輯關(guān)系進(jìn)行自動(dòng)匹配,給出搜索提示,糾正用戶(hù)輸入錯誤。
(6)具有熱詞自動(dòng)排序和顯示功能,可自動(dòng)統計搜索關(guān)鍵詞的搜索頻度,將某一時(shí)間段內搜索量較高的關(guān)鍵詞作為搜索熱詞,并根據熱度動(dòng)態(tài)自動(dòng)調整排序。
(7)支持拼音搜索功能,采用詞語(yǔ)智能拼音匹配模式,并結合關(guān)鍵詞提醒聯(lián)想功能,實(shí)現拼音和中文友好聯(lián)系的搜索功能。
(8)系統支持管理員定義屏蔽詞和停用詞的搜索,當用戶(hù)輸入收錄
的詞匯時(shí),系統不展示搜索結果信息。
(9)支持多個(gè)關(guān)鍵詞搜索和整句搜索。
(10)系統使用基于文檔語(yǔ)義的技術(shù)實(shí)現同一站點(diǎn)內搜索結果信息的自動(dòng)排重,即“相同”的文檔在索引過(guò)程中僅被索引一次,解決大量相同文檔的搜索問(wèn)題,提高索引效率,幫助用戶(hù)快速找到搜索結果。
(11)對含有圖片的信息,其搜索結果列表應顯示其縮略圖;
(12)系統具有檢索結果優(yōu)先顯示置頂功能。
?。ㄊ┲悄芡扑]系統
(1)根據網(wǎng)站用戶(hù)訪(fǎng)問(wèn)行為,結合網(wǎng)站數據分析,找到網(wǎng)站訪(fǎng)問(wèn)熱點(diǎn),自動(dòng)聚合相關(guān)信息(即相關(guān)文件、政策、咨詢(xún)類(lèi)信息),實(shí)現網(wǎng)站信息智能推薦。
(2)可根據關(guān)鍵詞、熱詞等條件分析信息之間的直接聯(lián)系或間接關(guān)系,自動(dòng)分析、梳理、聚類(lèi)展示。
(3)可自動(dòng)進(jìn)行專(zhuān)題信息匯聚,通過(guò)數據采集技術(shù),獲取相關(guān)信息進(jìn)行集中
管理和存儲,根據用戶(hù)訪(fǎng)問(wèn)習慣,進(jìn)行數據的重組、拼裝,聚合,形成專(zhuān)題欄目;也可根據各專(zhuān)題的關(guān)注度,對推薦專(zhuān)題及相應的頁(yè)面表現位置進(jìn)行展示順序的自動(dòng)調整,供公眾訪(fǎng)問(wèn)。
?。ㄊ唬┲悄軉?wèn)答系統
(1)能夠深度挖掘網(wǎng)站群信息內容,建立和完善智能應答知識庫,可根據用戶(hù)自定義規則,通過(guò)信息聚合技術(shù),按照信息采集、聚合、挖掘和檢索流程,實(shí)現跨部門(mén)、跨行業(yè)的信息整合與資源共享。
(2)能夠自動(dòng)將咨詢(xún)問(wèn)題保存入庫,可自定義站點(diǎn)檢索到相關(guān)咨詢(xún)問(wèn)題,可實(shí)時(shí)預處理用戶(hù)的輸入信息,根據輸入內容與后臺檢索引擎交互,自動(dòng)糾錯,實(shí)時(shí)提示相關(guān)信息,引導類(lèi)似問(wèn)題進(jìn)行解答。
(3)可利用信息資源庫及應答知識庫中的信息,即時(shí)自動(dòng)回答用戶(hù)提出的問(wèn)題,向用戶(hù)展示相關(guān)度較高的信息。
(4)能夠充分使用站群內所有站點(diǎn)的信息資源,咨詢(xún)問(wèn)題答復內容可由平臺下多個(gè)站點(diǎn)信息數據組成關(guān)聯(lián)頁(yè)面提供給用戶(hù)。
(5)能夠實(shí)現多樣化展現方式,可以預分類(lèi)政務(wù)資源,將多個(gè)網(wǎng)站中的同類(lèi)欄目合并為一個(gè)分類(lèi),為用戶(hù)按分類(lèi)展現更全面精準的搜索結果。
(6)要求具備自學(xué)習功能,能夠自動(dòng)豐富知識庫,對于無(wú)法解決的問(wèn)題可自動(dòng)轉人工解答。
?。ㄊ┮苿?dòng)門(mén)戶(hù)系統
(1)要求采用HTML5網(wǎng)站頁(yè)面應自適應技術(shù),能夠實(shí)現不同移動(dòng)終端(例如蘋(píng)果、安卓系統) 訪(fǎng)問(wèn)移動(dòng)門(mén)戶(hù)時(shí)自適應展示,能夠在各種訪(fǎng)問(wèn)終端下保持完整良好的頁(yè)面布局和內容可讀性。
(2)要求移動(dòng)端與PC端使用同一域名進(jìn)行訪(fǎng)問(wèn),系統自動(dòng)識別訪(fǎng)問(wèn)終端并自適應頁(yè)面展示效果。
(3)要求移動(dòng)門(mén)戶(hù)所展示信息不再二次錄入,統一由站點(diǎn)內容管理系統提供,以保證數據來(lái)源的統一性。
(4)要求提供最新新聞、政務(wù)公開(kāi)、互動(dòng)交流、解讀回應、民意調查、輿論引導、政務(wù)服務(wù)、政府辦公等信息內容的展示。
(5)要求支持可定制欄目訪(fǎng)問(wèn)。
五、其他需求說(shuō)明
1.網(wǎng)站兼容性要求
要求網(wǎng)站頁(yè)面具有很好的兼容性,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
2.UI/UE設計
(1)界面設計需要突出地方特色
(2)文字,圖形色彩統一,搭配合理,界面清楚整潔,層次結構清楚。
(3)統一首頁(yè)和其他各級頁(yè)面的排版風(fēng)格。
(4)頁(yè)面富有時(shí)代氣息和美感,色彩搭配穩重、合理、大氣。
(5)多媒體、動(dòng)畫(huà)頁(yè)面要求豐富而生動(dòng)。
3.子站設計要求
(1)滿(mǎn)足各子站個(gè)性化頁(yè)面設計需求,根據各部門(mén)網(wǎng)站管理人員要求進(jìn)行設計與實(shí)施。
(2)本次頁(yè)面設計主要從以下幾個(gè)方面進(jìn)行規劃:頁(yè)面風(fēng)格、頁(yè)面人性化和易用性、頁(yè)面內容、頁(yè)面結構等,圍繞信息公開(kāi)、辦事服務(wù)、互動(dòng)交流等功能定位,設計門(mén)戶(hù)網(wǎng)站頁(yè)面框架,清晰、合理、科學(xué)展現網(wǎng)站內容,避免累贅和頁(yè)面冗余。
4.歷史數據遷移要求
(1)要求提出詳盡的網(wǎng)站數據遷移方案。
(2)要求將實(shí)施集約化的網(wǎng)站的全部數據,收錄
各站點(diǎn)欄目信息、新聞信息、公開(kāi)信息、互動(dòng)信息、用戶(hù)信息、用戶(hù)對應權限、圖片、附件、多媒體文件等數據平穩遷移至德陽(yáng)市政府網(wǎng)站集約化平臺,確保不丟失任何有效數據,處理好新網(wǎng)站欄目信息與歷史數據的對應關(guān)系。
(3)要求保證集約化網(wǎng)站切換的平滑過(guò)渡,做好數據的同步更新。
5.硬件及部署要求
投標人必須詳細列出項目的硬件需求,即政務(wù)云平臺虛擬機數量及資源參數,以及系統的部署方案。
六、項目實(shí)施、培訓
?。ㄒ唬╉椖靠⒐を炇找?br /> 按中華人民共和國現行項目建設規范和合同規定的驗收評定標準等要求進(jìn)行驗收。
根據施工進(jìn)度情況,按照標志性工作成果劃分,分期進(jìn)行檢查、驗收。
2.實(shí)施要求
投標人應具體說(shuō)明實(shí)施本項目擬采用方案,確保至少兩人駐場(chǎng)實(shí)施,團隊
組織方式和保障力量,中標單位實(shí)施過(guò)程中出現資源、速度、質(zhì)量協(xié)調控制不力、采購方有權更換責任人。
3.測試要求
投標供應商在實(shí)施過(guò)程中必須制定整體的測試方案,保證各子系統聯(lián)接正確,數據傳送正常。測試方案要明確測試關(guān)鍵點(diǎn),分單元測試、邊緣測試、整體測試等。測試方法應包括模塊測試、回歸測試、壓力測試、性能測試、功能測試、數據測試、安全測試、系統測試等。測試內容必須包括功能要求、可靠性、安全性、可擴充性、可維護性、平臺移植性、整體性能、與其他平臺接口等,系統試運行期不低于三個(gè)月。
4.驗收要求
投標供應商應負責在項目用戶(hù)驗收前將系統的全部相關(guān)的系統軟件,各階段開(kāi)發(fā)文檔,平臺及其他應用系統交互接口功能的源代碼和數據表結構,以及有關(guān)產(chǎn)品的系統說(shuō)明書(shū)、安裝手冊、維護手冊、技術(shù)文件、資料及安裝、測試、驗收報告等文檔匯集成冊交付項目單位。只有文檔齊全后方可組織驗收。對整個(gè)項目的驗收包括檢查整個(gè)系統是否實(shí)現了招標人所要求的功能,是否與投標供應商提出的解決方案中既定目標功能完全一致。
投標供應商必須根據系統總體設計方案提出驗收細則和驗收文檔清單(收錄
需求調研、系統分析、軟件設計、軟件開(kāi)發(fā)、系統測試、實(shí)施上線(xiàn)、運行維護等階段),招標人將根據驗收方案對系統每個(gè)部分逐一進(jìn)行項目驗收。
5.文檔要求
投標供應商提供的技術(shù)文件應該真實(shí)、全面、完整、詳細,應以中文書(shū)寫(xiě)。投標供應商提供的技術(shù)文件應是能滿(mǎn)足系統運行所需的安裝調試、操作使用及維護管理等的詳細技術(shù)資料。
投標供應商應負責在項目最終驗收時(shí)將系統從合同簽定之日起所有關(guān)于本項目的文檔資料(包括初步驗收文檔的版本更新和試運行期產(chǎn)生的文檔)交付采購人。
招標人認為必要的其他文檔。
?。ǘ┡嘤柍兄Z
供應商技術(shù)培訓及相關(guān)系統的基礎培訓,內容包括軟件安裝調試及初始化、使用等的基本操作培訓。供應商須制定出詳細完整的培訓方案,包括培訓的具體內容、培訓方式(現場(chǎng)培訓或集中培訓)、人數、教師、日程安排、資料等。應能使采購人相關(guān)人員獨立操作、維護、管理,確保系統能正常安全運行。
供應商應提供的詳細培訓方案必須包括:(1)集群管理員操作培訓;(2)各
部門(mén)管理員、應用軟件操作員等的基本操作培訓。
實(shí)際培訓時(shí)間和地點(diǎn)按中標人與采購人商定的為準。
七、售后服務(wù)技術(shù)需求
售后服務(wù)包括但不限于下列服務(wù):
1.網(wǎng)站頁(yè)面優(yōu)化服務(wù)
(1)網(wǎng)站信息維護培訓指導。包括網(wǎng)站信息的增、刪、查、改等操作的指導和問(wèn)題解答;添加圖片及附件操作指導;網(wǎng)站靜態(tài)頁(yè)面生成等操作指導。
(2)網(wǎng)站頁(yè)面的圖片、文字排版和調整。包括網(wǎng)頁(yè)圖片的制作、更換、布局調整,文字的內容、格式、鏈接等的修改。
(3)保證網(wǎng)站頁(yè)面顯示正常。解決文字或圖片內容撐出、內容不顯示或顯示不正確、頁(yè)面文字出現亂碼、頁(yè)面出現錯誤報告、頁(yè)面在有的瀏覽器上顯示不正確、頁(yè)面沒(méi)有找到、網(wǎng)頁(yè)不能訪(fǎng)問(wèn)等問(wèn)題。
2. 網(wǎng)站內容管理平臺及選件維護服務(wù)
(1)對國家及省政府最新要求的響應
及時(shí)響應國家及省政府對政府門(mén)戶(hù)網(wǎng)站、集約化建設及互聯(lián)網(wǎng)+政務(wù)服務(wù)相關(guān)內容的建設要求,對門(mén)戶(hù)網(wǎng)站前臺服務(wù)內容進(jìn)行調整。
(2)模版維護服務(wù)
每月一次。包括:定期對現有網(wǎng)站巡檢,對現有的模版存在的不足進(jìn)行調優(yōu),如排版不合適、格式不統一、色調不一致、內容塊錯位、字體大小不一致、文字沒(méi)對齊等情況,但不涉及到頁(yè)面新的風(fēng)格。對現有的模版調整,包括添加刪除專(zhuān)題鏈接、頁(yè)面局部細節樣式調整,錯字,錯鏈,圖標替換等,提交《網(wǎng)站模版優(yōu)化記錄》。
(3)常規檢查維護
每月一次。包括:各服務(wù)器運行狀況、存儲空間狀況、軟件運行狀況、備份系統狀況等。并提出現有問(wèn)題和解決方法,并提交《網(wǎng)站常規檢查維護運行狀況報告》。
(4)專(zhuān)題維護
根據用戶(hù)需求提供專(zhuān)題制作協(xié)助服務(wù)。
(5)產(chǎn)品版本升級
不定期提供。主要幫助客戶(hù)不斷完善產(chǎn)品的功能和系統穩定性。每次升級要對升級的版本、工作做好日志記錄,并提交《版本升級記錄表》。
3、技術(shù)運維服務(wù)
(1)備份服務(wù)
對門(mén)戶(hù)網(wǎng)站系統涉及到的內容進(jìn)行備份,包括數據庫每天備份、網(wǎng)站應用程
序備份、網(wǎng)站所有補丁備份、項目涉及到的文檔進(jìn)行備份等。提交《系統備份檢查表》,內容包括備份聯(lián)系人、聯(lián)系電話(huà)、時(shí)間、路徑、內容等。
(2)錯誤日志分析
對網(wǎng)站涉及到的所有日志(包括中間件等產(chǎn)品)記錄要進(jìn)行定期查看,找出錯誤內容。提交《日志錯誤分析表》。
4、服務(wù)質(zhì)量要求
(1)質(zhì)量保證期限及費用
系統驗收合格、雙方簽署驗收書(shū)之日起,為本次建設內容中的子站提供至少1年維保服務(wù)。在系統維護期內,開(kāi)發(fā)的軟件應提供免費升級服務(wù)。維保服務(wù)到期后,應承諾對系統的升級僅收取成本費。
(2)售后服務(wù)方案
中標人需要提供詳細的售后服務(wù)方案,包括服務(wù)人員、措施、應急預案及相關(guān)流程等內容。在安裝、調試及系統免費維護期內,必須提供系統故障的應急處理方案。承諾所投產(chǎn)品系統不存在“后門(mén)”問(wèn)題。
(3)服務(wù)響應要求
中標人承諾提供現場(chǎng)服務(wù)人員,且能夠提供7*24小時(shí)響應服務(wù),一般問(wèn)題30分鐘之內解決,重大問(wèn)題4小時(shí)內解決。
說(shuō)明:
1、歡迎供應商提供服務(wù)保障等于或高于該基本要求的服務(wù)。
2、本章的要求不能作為資格性條件要求評標,如存在資格性條件要求,應當認定招標文件編制存在重大缺陷,評標委員會(huì )應當停止評標。 查看全部
解決方案:labview100個(gè)實(shí)例之簡(jiǎn)單采集(2)
目錄
提示:文章寫(xiě)完后,目錄可以
前言
之前做過(guò)一個(gè)很簡(jiǎn)單的程序,但總覺(jué)得不能體現labview真正的特點(diǎn),所以打算做一個(gè)系列,讓一些初學(xué)者容易理解這些。首先是模塊化和功能封裝的概念。
1.例子
這是一個(gè)完整的主程序框圖,可以清楚的看到分為兩大區域——“參數”設置區和“主界面”。主界面收錄
四個(gè)區域,分別是修改頻率較高的參數區、控制區(啟停)、狀態(tài)區和顯示區。用于采集一段時(shí)間內的聲音和電流信號。

運行效果為:
設置采集條件和數據存儲路徑,通過(guò)按鈕控制采集的開(kāi)始,程序按照指定的采樣率采集一段時(shí)間的信號并保存時(shí)域數據(原創(chuàng )
數據,方便后期數據處理)。如果可能,你可以嘗試運行一下來(lái)測試一下效果。
模塊化與功能封裝.zip-MCU文檔資源-CSDN文庫
2. 模塊化與功能封裝 1. 模塊化
Labview的一大特點(diǎn)是程序往往以模塊化的方式構建,也就是常說(shuō)的子VI。
2.功能封裝

如圖所示,此時(shí)我們說(shuō)這個(gè)程序使用了三個(gè)子VI,分別封裝了采集、回放、存儲三個(gè)功能。
在制作子VI時(shí),需要明確需要封裝的函數,輸入輸出的數據類(lèi)型。在保證通用性的前提下,主程序框圖應該是最簡(jiǎn)潔的。
總結
本例主要是簡(jiǎn)單說(shuō)明Labview中子VI的功能以及函數封裝的方便性。當我們創(chuàng )建一個(gè)子VI并賦予它特定的功能時(shí),我們可以很方便地在項目的任何地方調用它,而不需要再次編輯重復的代碼。
特別注意的是,當一個(gè)子VI被我們封裝后,理論上我們可以直接在本程序中調用。但往往在一個(gè)大型項目中,一些子VI因為其功能而被頻繁使用,我們需要考慮是否要重復調用它們。重復調用是指我們在某個(gè)時(shí)間多次調用同一個(gè)子VI,程序會(huì )等待并逐次執行每次調用,導致程序運行時(shí)間發(fā)生變化甚至數據沖突(因為一般一個(gè)子VI計算機只分配一塊內存空間 同時(shí)調用時(shí),我們不知道誰(shuí)先調用并輸出結果)。
我們可以在VI的屬性——“執行”欄中將VI設置為可重入VI。這樣,程序運行時(shí),當在多個(gè)地方同時(shí)調用這個(gè)VI時(shí),會(huì )創(chuàng )建不同的工作區,多個(gè)調用者的數據會(huì )分別存儲,不會(huì )發(fā)生沖突和干擾。
★ 范例中提到的結構、文件、信號處理和信號分析的范例版本及后續計劃為17版本,如需降級請及時(shí)聯(lián)系我們。
解決方案:采購內容及技術(shù)要求
一、采購要求
一、項目建設背景
政府網(wǎng)站是現代政府在信息化條件下政府密切聯(lián)系人民群眾的重要橋梁,是網(wǎng)絡(luò )時(shí)代政府履行職責的重要平臺,是各級政府機關(guān)提供信息公開(kāi)、回應關(guān)切、辦事服務(wù)、互動(dòng)交流的重要載體。近年來(lái),黨中央、國務(wù)院、四川省政府高度重視政府網(wǎng)站建設和管理工作,先后下發(fā)了多項關(guān)于加強政府網(wǎng)站建設的管理規定。從2015年4月起,國務(wù)院開(kāi)展了全國政府網(wǎng)站普查工作,對政府網(wǎng)站的建設起到了前所未有的推動(dòng)作用。
2017年5月,《國務(wù)院辦公廳關(guān)于印發(fā)政府網(wǎng)站發(fā)展指引的通知》(國辦發(fā)〔2017〕47號)發(fā)布,對政府網(wǎng)站集約化建設提出了詳細的建設要求。德陽(yáng)市政府網(wǎng)站集約化建設項目將以此為依據,并根據《四川省人民政府辦公廳關(guān)于加強政府網(wǎng)站信息內容建設的實(shí)施意見(jiàn)》(川辦發(fā)〔2015〕53號)和《德陽(yáng)市人民政府辦公室關(guān)于進(jìn)一步做好“互聯(lián)網(wǎng)+政務(wù)服務(wù)”有關(guān)工作的通知》(德辦函〔2016〕99號)以及政府網(wǎng)站績(jì)效考核的要求,以問(wèn)題和需求為導向,以為民服務(wù)為根本宗旨,順應公眾的期盼,按照利企便民的原則,樹(shù)立“以信息公開(kāi)為基礎、公共服務(wù)為核心”的理念,積極推進(jìn)政府網(wǎng)站集約化平臺建設、應用新技術(shù)拓展服務(wù)渠道,以增強網(wǎng)站用戶(hù)體驗、提高辦事服務(wù)、實(shí)現信息共享,為公眾提供優(yōu)質(zhì)、便捷、高效服務(wù)。
二、項目建設目標
根據國家和四川省政府網(wǎng)站績(jì)效考核指標及其他相關(guān)政策文件中對“互聯(lián)網(wǎng)+”環(huán)境下政府網(wǎng)站的定位,借鑒國內外領(lǐng)先政府網(wǎng)站的先進(jìn)經(jīng)驗和趨勢特點(diǎn),以“技術(shù)先進(jìn)、功能完備、服務(wù)智能、安全穩定”為建設原則,著(zhù)重新技術(shù)應用,基于大數據平臺,采用移動(dòng)互聯(lián)網(wǎng)等技術(shù)手段,建設德陽(yáng)智慧型、實(shí)用化、個(gè)性化、集約化網(wǎng)站群管理平臺,最終實(shí)現德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站、40個(gè)市級部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)、6個(gè)縣(市、區)政府門(mén)戶(hù)網(wǎng)站的集約化建設工作。建設總體目標如下:
?。? 加強信息資源整合,搭建全市統一的政府網(wǎng)站信息資源庫,有效管理全市政府網(wǎng)站信息資源。
?。? 建立信息支撐體系,提供網(wǎng)站信息采集技術(shù),豐富網(wǎng)站信息供給手段。能夠通過(guò)集約化平臺集中實(shí)現采集、發(fā)布信息和數據,實(shí)現主站與子站、子站與子站、子站與欄目和市級部門(mén)子站與縣級部門(mén)專(zhuān)欄等之間的互聯(lián)互通、信息復用,為信息公開(kāi)提供平臺支撐,充分發(fā)揮政府網(wǎng)站在政務(wù)公開(kāi)中第一平臺的作用。
?。? 加強網(wǎng)站智能化建設,提供智能搜索、智能問(wèn)答、智能推薦和無(wú)障礙訪(fǎng)問(wèn)等功能??筛鶕脩?hù)需求調整搜索排序、聚合相關(guān)服務(wù)等,實(shí)現“搜索即服務(wù)”。主動(dòng)為社會(huì )公眾提供智能、實(shí)用、便捷、精準、高效的網(wǎng)站服務(wù),提升政府網(wǎng)站的公共服務(wù)能力和水平。
?。? 建立健全網(wǎng)站內容保障監管體系,加強網(wǎng)站的運維、監管手段,提供切實(shí)有效的網(wǎng)站運維、監管能力,及時(shí)發(fā)現網(wǎng)站存在的問(wèn)題。保證網(wǎng)站運行安全、穩定,服務(wù)內容全面、準確。
?。? 提供統一、完善的網(wǎng)站互動(dòng)交流功能,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。
6. 注重政務(wù)微博、微信等互聯(lián)網(wǎng)新技術(shù)的應用,加強對移動(dòng)終端應用功能的支持,豐富公眾訪(fǎng)問(wèn)渠道,有效提高用戶(hù)體驗。
7.能夠通過(guò)“深度鏈接”、各類(lèi)接口整合等方式,實(shí)現全市統一的辦事服務(wù)入口和數據開(kāi)放入口;與有效與四川省政府信息公開(kāi)目錄管理系統、四川省一體化政務(wù)服務(wù)平臺、德陽(yáng)市政務(wù)信息資源共享平臺等進(jìn)行整合和對接,最終實(shí)現平臺互聯(lián)互通、信息資源共享。
8.圍繞2018年國家和四川省政府網(wǎng)站績(jì)效評估指標體系,對網(wǎng)站建設進(jìn)行升級優(yōu)化,提升德陽(yáng)市政府門(mén)戶(hù)網(wǎng)站排名,力爭進(jìn)入省內前10名;加強網(wǎng)站建設的方向性引導、有效激勵服務(wù)改進(jìn)措施,保障網(wǎng)站持續發(fā)展。
三、總體技術(shù)要求
?。ㄒ唬┸浖a(chǎn)品技術(shù)要求
1.本次項目的投標商必須采用先進(jìn)且成熟的技術(shù)和產(chǎn)品,主要產(chǎn)品應具有云平臺部署成功案例。
2.軟件產(chǎn)品應具有網(wǎng)站集群化平臺建設能力。
3.系統需支持大量用戶(hù)訪(fǎng)問(wèn)和海量數據的存儲、檢索和管理,平臺功能部署靈活統一。
4.產(chǎn)品具有安全、可優(yōu)化、可擴展性能,易于二次開(kāi)發(fā),應免費提供接口。
5.系統應采用J2EE或其他符合行業(yè)發(fā)展方向的先進(jìn)技術(shù)架構;
6.系統應用結構體系的表示層、業(yè)務(wù)層、數據層、訪(fǎng)問(wèn)層應分開(kāi),支持分布式部署,支持無(wú)限站點(diǎn)擴展;
7.系統應支持Oracle、MySQL、Microsoft SQL Server等主流數據庫系統和主要國產(chǎn)化數據庫系統;
8.網(wǎng)站系統兼容性強,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
9.系統支持雙機熱備部署模式。
?。ǘ┻\行性能指標
1. 在網(wǎng)絡(luò )穩定的環(huán)境下,系統后臺單一操作的響應時(shí)間小于3秒;網(wǎng)站頁(yè)面訪(fǎng)問(wèn)響應時(shí)間小于1秒。
2. 網(wǎng)站滿(mǎn)足并發(fā)訪(fǎng)問(wèn)用戶(hù)數不低于10000的訪(fǎng)問(wèn)請求。
3. 支持初始數據量不少于100萬(wàn)記錄數,支持表空間自動(dòng)擴充。
4. 系統能夠實(shí)現滿(mǎn)足網(wǎng)站面向服務(wù)的目標,最終實(shí)現服務(wù)化、構件化、松耦合的SOA體系架構。
5. 系統提供7×24小時(shí)的連續運行,平均系統年故障時(shí)間≤2個(gè)小時(shí),平均故障修復時(shí)間≤30分鐘。
6. 網(wǎng)頁(yè)代碼和標記設計盡可能簡(jiǎn)化,以節約帶寬。
7. 網(wǎng)站要提供不間斷服務(wù),支持信息多個(gè)站點(diǎn)同時(shí)發(fā)布功能,單個(gè)站點(diǎn)故障或更新維護等不能影響其它站點(diǎn)的正常使用。
?。ㄈ┌踩阅芤?br /> 1. 系統應支持分布式部署,系統應支持靜態(tài)頁(yè)面發(fā)布。
2. 系統應建立基于角色和工作分工的權限控制機制,重要信息需具備有效的加密方式進(jìn)行傳遞;系統應提供數據自動(dòng)非本機轉儲備份和故障恢復等應急響應功能,具備完善的日志記錄、審計和數據備份功能。
3. 具備良好的數據庫安全策略。系統安全設計符合《計算機信息系統安全保護等級劃分準則》(GB17859-1999)第三級(安全標記保護級)要求。
四、建設內容及功能性需求
此次項目招標主要目的是規劃、搭建好德陽(yáng)市政府網(wǎng)站集約化平臺,并完成“中國·德陽(yáng)”網(wǎng)的改版和40個(gè)市級政府部門(mén)網(wǎng)站(含德陽(yáng)經(jīng)開(kāi)區網(wǎng)站、德陽(yáng)高新區網(wǎng)站)的集約化建設,但不包括德陽(yáng)市6縣(市、區)政府門(mén)戶(hù)網(wǎng)站集約化建設內容。德陽(yáng)市政府網(wǎng)站集約化平臺將部署在德陽(yáng)市政務(wù)云上。具體建設內容如下:
?。ㄒ唬┙y一用戶(hù)管理系統
將德陽(yáng)市使用站群系統的所有用戶(hù)統一管理起來(lái),實(shí)現用戶(hù)的屬性管理,并將用戶(hù)與組織機構相關(guān)聯(lián)。
用戶(hù)管理,提供對用戶(hù)的增、刪、改,可禁用和啟用用戶(hù)帳號,設置用戶(hù)擁有的功能權限;可自定義用戶(hù)組織架構;用戶(hù)組管理,提供對用戶(hù)組的增、刪、改,設置用戶(hù)組擁有的功能權限。
?。ǘ┬畔①Y源庫系統
以整合德陽(yáng)市所有政府網(wǎng)站資源實(shí)現共享為目標,建設集約化網(wǎng)站信息資源庫,實(shí)現對信息資源的統一分類(lèi)、統一展現、統一監管及各模塊之間的無(wú)縫調用,有效解決平臺建設資源共享的問(wèn)題。
1. 要求針對信息資源庫建設提出相應的解決方案和產(chǎn)品,滿(mǎn)足結構化和非結構化數據的數據庫建設。
2. 要求系統提供標準管理體系,即涵蓋已經(jīng)發(fā)布的國家標準、企業(yè)標準、行業(yè)標準和地方標準,也可以管理系統自定義的數據字典。
3. 要求系統具有資源庫管理,數據元管理,數據集管理,表單管理等數據庫基礎應用組件。
4. 要求系統提供分類(lèi)管理能力,分類(lèi)管理包括數據元分類(lèi)管理,數據分類(lèi)管理。
5. 要求系統提供資源管理能力,系統提供基本的數據錄入功能,也可以使用數據交換平臺,通過(guò)WebService或ETL工具進(jìn)行數據交換。
6. 要求系統提供共享管理能力,包括:自定義分組管理,共享維護,共享授權。共享授權實(shí)現數據分級管理,可以對用戶(hù)授權,也可以對分組授權。
7. 要求系統提供系統管理能力,包括用戶(hù)管理,角色管理,授權管理,日志管理。
?。ㄈ┘s化網(wǎng)站監管平臺
以“統一標準體系、統一技術(shù)平臺、統一安全防護、統一運維監管,集中管理信息數據,集中提供內容服務(wù)”為目標,結合網(wǎng)站屬地化管理體系,建設德陽(yáng)市政府網(wǎng)站集約化管理平臺,實(shí)現站點(diǎn)管理、規范性檢查、網(wǎng)站普查指標自檢、網(wǎng)站訪(fǎng)問(wèn)監控、網(wǎng)站維護監控、網(wǎng)站運行監控等功能,滿(mǎn)足網(wǎng)站集約化統一管理要求。具體功能如下:
1.站點(diǎn)監管
(1)提供站群系統內各子站基本信息管理功能,包括管理的站點(diǎn)名稱(chēng)、站點(diǎn)域名、站點(diǎn)描述信息、主辦單位及聯(lián)系人信息、網(wǎng)站備案信息等。
(2)按照《政府網(wǎng)站發(fā)展指引》要求提供各項網(wǎng)站規范性的監測功能,包括名稱(chēng)規范、域名規范、備案信息規范、模板規范、標簽規范、欄目規范等一致性檢查、冗余檢查、屬地化監測等。
2.網(wǎng)站普查指標監測
根據網(wǎng)站普查要求,提供網(wǎng)站指標監測功能,包括網(wǎng)站可用性監測、存在錯誤頁(yè)面分析、頁(yè)面關(guān)聯(lián)分析、空白欄目監測、欄目更新頻率監測、網(wǎng)站外鏈監測、敏感詞及錯別字掃描等。
3.網(wǎng)站訪(fǎng)問(wèn)監測
根據網(wǎng)站實(shí)際運行情況,可數字化或圖表化展現網(wǎng)站運行監控的各項訪(fǎng)問(wèn)指標,可對指定時(shí)間段的訪(fǎng)問(wèn)情況進(jìn)行統計、分析,并能生成統計分析報告(表)進(jìn)行打印或導出。監測功能及內容如下:
(1)搜索引擎監控:包括訪(fǎng)問(wèn)人次、站內搜索次數、搜索結果點(diǎn)擊次數、搜索結果點(diǎn)擊率、搜索引擎排行、網(wǎng)站檢索詞排行等。
(2)網(wǎng)站訪(fǎng)問(wèn)監控:包括訪(fǎng)問(wèn)渠道、瀏覽量、訪(fǎng)客數、平均停留時(shí)間、日訪(fǎng)問(wèn)變化趨勢圖等;
(3)瀏覽頁(yè)數性能監控:包括系統連接時(shí)間、響應時(shí)間、下載時(shí)間以及無(wú)法訪(fǎng)問(wèn)次數等;
(4)智能報警策略:包括故障的持續時(shí)間、問(wèn)題嚴重性分級、分類(lèi)報警,報警通知方式支持郵件、短信等。
4.網(wǎng)站維護監測
(1)針對網(wǎng)站內容管理進(jìn)行數據分析,包括網(wǎng)站欄目(欄目訪(fǎng)問(wèn)量、欄目信息量、欄目參與部門(mén)數和欄目參與人員數等)、部門(mén)信息(部門(mén)信息發(fā)布量、部門(mén)業(yè)務(wù)辦理量和部門(mén)業(yè)務(wù)辦結率等)和公共訴求(訴求目的、訴求內容分類(lèi)、處理單位、滿(mǎn)意度等)等數據的統計分析功能。
(2)提供系統站內通知功能,可對系統內各用戶(hù)發(fā)送消息,解決系統管理人員日常工作溝通及信息共享。
5.網(wǎng)站運行檢測
(1)支持對服務(wù)器硬件層進(jìn)行監控,包括服務(wù)器的工作狀態(tài)、處理器、內存、進(jìn)程等。
(2)提供靈活、全面、便捷的監控方式,監管頁(yè)面秒級刷新,運行高效、安全可靠。
6.系統日志管理
提供系統日志的管理界面,能詳細記錄系統操作日志,并形成日志信息或日志文件,可對日志文件進(jìn)行導出。
?。ㄋ模┚W(wǎng)站群管理平臺
以站點(diǎn)管理為重點(diǎn),支持集中式建設部署和分布式管理維護。
支持對歷史信息的調入、調出,提供對信息的全流程跟蹤管理。
支持與其它平臺的無(wú)縫對接。系統接口可開(kāi)放,支持網(wǎng)站擴展功能模塊的安裝調試,具有高集成、可擴展、易管理等特性。
采用XML、WebService等標準,提供組件化的統一數據接口,有效實(shí)現信息的采集、聚合。
1.站群管理系統
(1)要求實(shí)現頁(yè)面展現與信息分離,刪除或修改網(wǎng)頁(yè)模板時(shí)不會(huì )對信息造成影響。
(2)站群管理系統支持站群下所有子站點(diǎn)的創(chuàng )建、修改、暫停、刪除及服務(wù)器資源配置。
(3)系統提供多級授權分層管理機制,每個(gè)子站點(diǎn)都提供獨立的站點(diǎn)管理功能,站點(diǎn)管理人員能夠對子站點(diǎn)進(jìn)行角色權限管理、資源管理、用戶(hù)權限管理及站點(diǎn)統計等操作,保證用戶(hù)在統一的平臺下獨立管理自己的子站點(diǎn)。
(4)站群系統內各站點(diǎn)之間可以共享數據源,保證各站點(diǎn)信息的一致性。
(5)系統支持密碼強度管理、CA綁定等安全策略。
2.站點(diǎn)管理系統
(1)網(wǎng)站信息的發(fā)布具有靜態(tài)信息發(fā)布和動(dòng)態(tài)信息發(fā)布相結合的發(fā)布模式,用戶(hù)可根據實(shí)際需要選擇發(fā)布方式,以同時(shí)滿(mǎn)足網(wǎng)站訪(fǎng)問(wèn)速度、并發(fā)訪(fǎng)問(wèn)量及網(wǎng)站交互功能的多重需求。
(2)系統支持對多種信息格式的發(fā)布,包括音頻、視頻等多媒體格式。
(3)系統支持增量發(fā)布與完全發(fā)布,支持定時(shí)發(fā)布和立即發(fā)布,可根據需要自定義發(fā)布方式。

(4)系統提供統一用戶(hù)驗證功能,通過(guò)賬號、密碼、驗證碼相結合的方式登陸到系統管理界面。
(5)內容維護人員只能對自己權限范圍內的內容進(jìn)行管理,無(wú)權看到并操作其他用戶(hù)管理的內容。
(6)系統詳細記錄所有用戶(hù)的系統操作,以便于查詢(xún)和管理。
(7)系統提供權限組功能,具有相同權限的用戶(hù)可劃分為同一權限組。權限的分配可以詳細到每一個(gè)欄目。
(8)提供系統登陸賬號長(cháng)時(shí)間無(wú)操作的自動(dòng)注銷(xiāo)功能,可自行設置注銷(xiāo)時(shí)間。
(9)系統可根據自定義備份策略(如異地備份、定時(shí)備份等)進(jìn)行站點(diǎn)數據備份,能對備份文件進(jìn)行刪除、下載、恢復管理。
3.內容管理系統
(1)具有網(wǎng)站內容采集、在線(xiàn)編輯、審核發(fā)布、敏感詞過(guò)濾、錯別字檢測等功能,提供可視化編輯器,實(shí)現“所見(jiàn)即所得”的信息錄入、編輯效果。
(2)支持文檔錄入、發(fā)布、預覽、修改、刪除等操作,擁有豐富的文檔引用、復制、鏈接、移動(dòng)、同步等操作功能。
(3)內容編輯器具有多圖片上傳、word和pdf等文檔導入、一鍵排版、格式清理、去除空行、首行縮進(jìn)等常用功能;
(4)各子站點(diǎn)具有獨立、完善的信息采集、編發(fā)功能,可根據用戶(hù)權限進(jìn)行跨欄目、跨站點(diǎn)信息推送與共享。
(5)支持信息發(fā)布過(guò)程中的多級審核管理,能夠針對不同站點(diǎn)、不同欄目設置不同審核流程;
(6)支持前臺頁(yè)面樣式由模板進(jìn)行控制,模板提供代碼級修改,模板管理支持標簽語(yǔ)法,模板可嵌套模板,也可嵌套標簽;
(7)網(wǎng)站欄目能夠自由移動(dòng),可定制欄目信息發(fā)布類(lèi)型,可按權限獲取不同欄目、不同站點(diǎn)(如內容管理系統、信息公開(kāi)系統)的信息;
(8)信息錄入具備文章、組圖、鏈接、視頻四種類(lèi)型,能夠對普通文本、圖
片信息和音視頻等多種流媒體信息進(jìn)行發(fā)布和管理,滿(mǎn)足信息多樣化的需求;
(9)支持站點(diǎn)發(fā)布、分級欄目發(fā)布、信息單獨發(fā)布等操作,并可以指定文檔發(fā)布后在頁(yè)面顯示的順序;
(10)支持靜態(tài)發(fā)布、動(dòng)態(tài)發(fā)布和動(dòng)態(tài)靜態(tài)相結合的發(fā)布方式。
?。ㄎ澹┱畔⒐_(kāi)管理系統
根據部門(mén)業(yè)務(wù)和網(wǎng)站功能特點(diǎn)進(jìn)行科學(xué)分析、認真梳理,合理規劃頻道和欄目,與四川省政府信息公開(kāi)目錄管理系統進(jìn)行數據對接,有效實(shí)現德陽(yáng)市政府信息公開(kāi)數據在網(wǎng)站上的聚類(lèi)、共享、展示。
(1)該系統必須完全符合《政府信息公開(kāi)目錄系統實(shí)施指引(試行)》(國辦秘函[2009]6號)文件中的各項要求。
(2)要求系統提供靈活的元數據管理,以能適應不同類(lèi)型的信息記錄需要,元數據必需符合國家相關(guān)文件的要求,并具備元數據擴展功能;提供對多種類(lèi)型的元數據字段支持。定義數據層、功能層、使用層規范,同時(shí)配以編碼規則管理,支持批量修改,保持良好的擴展性;
(3)要求系統提供靈活的分類(lèi)管理,可自由地將采集到的信息進(jìn)行多渠道分類(lèi),包括主題分類(lèi)、機構分類(lèi)、體裁分類(lèi)及服務(wù)對象分類(lèi)。同時(shí)支持分類(lèi)的自由擴展。
(4)要求系統提供靈活的目錄管理功能,用戶(hù)可根據公眾的需要定義目錄的展現內容,通過(guò)定義目錄節點(diǎn)的生成規則,從而來(lái)獲取相應的數據,形成最終的人性化目錄;系統支持目錄推薦功能,即上級政府建立完成的目錄,可以作為“模板”推薦給下級單位。
(5)要求系統能夠自定義索引號編碼規則,依照信息公開(kāi)標準對信息進(jìn)行自動(dòng)編碼,生成信息索引號。當編碼規則發(fā)生修改時(shí),也可制定新規則,并批量修改信息索引號。
(6)要求系統提供良好的信息管理功能,從采集、標引、審核、發(fā)布到歸檔,完整記錄信息生命周期活動(dòng)。
(7)系統提供列表、簡(jiǎn)要、細覽等展現形式,顯示核心元數據,包括索引號、名稱(chēng)、內容概述、生成日期、文號等。
(8)系統應滿(mǎn)足信息錄入和審核權限的逐級分配,強化信息源頭管理,保障信息發(fā)布安全。
(9)系統具有依申請公開(kāi)功能,可對依申請公開(kāi)信息進(jìn)行接收、受理、審核、發(fā)布,并提供統計分析等功能,訪(fǎng)問(wèn)用戶(hù)可實(shí)時(shí)查詢(xún)依申請公開(kāi)處理狀態(tài)。
(10)要求系統提供綜合的績(jì)效評估模式,包括信息公開(kāi)工作量評估、依申
請公開(kāi)辦結率和辦結質(zhì)量評估。
?。┗?dòng)交流系統
系統嚴格遵循SOA模塊化設計思想,按照“高內聚,低耦合”原則,提供全面完善的網(wǎng)站互動(dòng)交流功能,包括領(lǐng)導信箱、民意征集、在線(xiàn)調查、咨詢(xún)投訴、網(wǎng)上信訪(fǎng)、在線(xiàn)訪(fǎng)談等,以解決公眾在實(shí)際工作和生活中所面臨的問(wèn)題,更好地為公眾提供服務(wù)。具體功能要求如下:
1.在線(xiàn)訪(fǎng)談系統
(1)支持圖文和視頻同步的在線(xiàn)訪(fǎng)談,要求具有文字直播、圖片直播、音頻直播及視頻直播四種功能形式;
(2)要求提供良好的人機對話(huà)界面,網(wǎng)友通過(guò)文字形式可實(shí)時(shí)提問(wèn),管理人員采集
和審核問(wèn)題,主持人轉達和引導提問(wèn),嘉賓對問(wèn)題實(shí)時(shí)解答;
(3)管理員可查看在線(xiàn)用戶(hù)情況,可以通過(guò)IP或用戶(hù)名來(lái)禁止用戶(hù)行為,可對用戶(hù)發(fā)言?xún)热菰O置過(guò)濾模式。
(4)主持人、嘉賓與網(wǎng)友的發(fā)言區要劃分明確;
(5)系統必須具有訪(fǎng)談預告功能,訪(fǎng)談預告可采用文字、圖片或視頻方式展示訪(fǎng)談背景和相關(guān)資料。
(6)訪(fǎng)談過(guò)程中要確保文字、圖片、音頻、視頻的流暢;
(7)對于歷史訪(fǎng)談,可按照日期進(jìn)行歸檔,形成歷史訪(fǎng)談目錄,網(wǎng)友可調閱歷史訪(fǎng)談。
(8)對于已經(jīng)完成的訪(fǎng)談,管理員可繼續對訪(fǎng)談內容進(jìn)行修改和編輯。
2.領(lǐng)導信箱系統
(1)系統具有工作流管理功能,可自定義信件辦理流程,實(shí)現從受理、轉辦、承辦、退回、辦結的全流程管理。
(2)系統具有信件辦理狀態(tài)實(shí)時(shí)查詢(xún)功能,來(lái)信人可根據信件編碼、姓名、聯(lián)系電話(huà)等對信件辦理狀態(tài)進(jìn)行查詢(xún),信箱管理人員可通過(guò)關(guān)鍵字、信件編碼、時(shí)間、部門(mén)、信件狀態(tài)等條件進(jìn)行查詢(xún)。
(3)前臺提供“信件選登”、“信件查詢(xún)”、“我要寫(xiě)信”等功能,寫(xiě)信內容需收錄
姓名、昵稱(chēng)、身份證號碼、聯(lián)系電話(huà)、電子郵件、信件標題、信件內容,可上傳附件材料等,具有詳實(shí)的展現形式,可對敏感詞進(jìn)行自動(dòng)屏蔽。
(4)后臺提供信件的回復、發(fā)布、選登等狀態(tài)的查看及信件辦理狀態(tài)的統計功能,提供信件的“公開(kāi)/不公開(kāi)”選項功能。
3.意見(jiàn)征集系統
(1)針對社會(huì )公眾關(guān)注的熱點(diǎn)問(wèn)題或者政策制定和工作成果開(kāi)展民意征集活動(dòng),民意征集的各個(gè)主題要求布局清晰、合理,方便閱覽;
(2)網(wǎng)友可根據征集主題的內容和背景資料發(fā)表自己的建議和觀(guān)點(diǎn),可以查看征集結果;
(3)系統后臺可實(shí)時(shí)查看所有社會(huì )公眾提交的意見(jiàn)和建議;
(4)意見(jiàn)征集結束后,前臺只保留征集主題、內容、結果,網(wǎng)友不能再進(jìn)行意見(jiàn)和建議的提交;
(5)能對網(wǎng)友發(fā)表的文字信息進(jìn)行安全性檢查。
4.網(wǎng)上調查系統
(1)管理員可根據不同的調查內容新建、修改、刪除調查問(wèn)卷。對于每個(gè)調查問(wèn)卷可以對標題、摘要、內容、選項、調查項組成結構等進(jìn)行管理,可靈活設計投票問(wèn)卷風(fēng)格;
(2)同一調查主題,可設置多個(gè)調查項;調查項應包括單選項調查、多選項調查、附加選項(填空)等調查類(lèi)型;
(3)同一IP地址在設定時(shí)間內只允許提交一次投票,杜絕惡意投票行為發(fā)生;
(4)投票結果可通過(guò)表格、柱狀圖、餅圖等形式進(jìn)行展現。
?。ㄆ撸祿杉到y
(1)數據采集系統借助先進(jìn)的信息抓取、信息分類(lèi)和信息流轉技術(shù),實(shí)現對指定網(wǎng)站信息(包括但不限于中央政府網(wǎng)站、省政府網(wǎng)站、重要新聞網(wǎng)站和平臺內外所需政府信息資源)的更新監測和有效采集。
(2)系統按照不同需要,可定點(diǎn)、定時(shí)監測和采集所需信息,并下載信息的圖片、視頻及附件等相關(guān)文件,將采集信息進(jìn)行準確分類(lèi)、整理、篩選,通過(guò)內容推送功能自動(dòng)推送到指定欄目。
(3)管理員可在后臺設置抓取的范圍、關(guān)鍵字、抓取時(shí)間等參數,系統根據設置好的抓取策略進(jìn)行信息自動(dòng)抓取。
(4)用戶(hù)可對采集到的信息按照日期、來(lái)源、標題進(jìn)行檢索、瀏覽;可以對信息內容與圖片分類(lèi)保存,支持信息分類(lèi)的自定義。
(5)系統支持將網(wǎng)頁(yè)中的信息內容按標題、作者、欄目、內容等進(jìn)行提??;自動(dòng)過(guò)濾網(wǎng)頁(yè)中的無(wú)用信息、廣告圖片等,自動(dòng)過(guò)濾重復的信息。
(6)對采集的信息可進(jìn)行二次編輯、審核,可向網(wǎng)站群內各個(gè)子站欄目進(jìn)行發(fā)布。
?。ò耍o(wú)障礙瀏覽系統
(1)面向聽(tīng)力、視力等有障礙的特殊人群提供縮放字體、縮放頁(yè)面、輔助光標、文本化網(wǎng)頁(yè)和語(yǔ)音個(gè)性化調整等輔助瀏覽功能。
(2)具有全程自動(dòng)語(yǔ)音提示、全程語(yǔ)音導航交互、光標語(yǔ)音指讀與連讀、文
字放大閱讀專(zhuān)用屏、網(wǎng)頁(yè)圖文放大縮小、高對比閱讀配色器、閱讀輔助光標等功能。
(3)系統需界面友好、易操作,無(wú)需安裝插件,支持各種主流瀏覽器。
?。ň牛┲悄軝z索系統
(1)提供專(zhuān)業(yè)的政府網(wǎng)站檢索功能,對政府網(wǎng)站檢索進(jìn)行分類(lèi)引導,按照政策法規、辦事事項、政府文件、新聞咨詢(xún)等類(lèi)別對用戶(hù)檢索內容進(jìn)行歸類(lèi)整理,清晰引導用戶(hù)進(jìn)行查閱。
(2)數據檢索范圍應包括站群內各業(yè)務(wù)部門(mén)、各縣(市、區)網(wǎng)站站點(diǎn),可對不同類(lèi)型數據源的數據進(jìn)行檢索。
(3)滿(mǎn)足即搜即用原則,支持圖片、視頻格式信息的檢索。
(4)支持關(guān)鍵字搜索、日期搜索。要求提供個(gè)性化檢索結果功能,如檢索結果分類(lèi)導航展現、檢索結果按不同維度(可以按系統,站點(diǎn),欄目,區縣,文檔類(lèi)型,時(shí)間單位,相似度等)過(guò)濾展示,檢索結果可進(jìn)行二次搜索。
(5)具有搜索關(guān)鍵詞自動(dòng)補全能力,動(dòng)態(tài)分析公眾搜索關(guān)鍵詞,按照關(guān)鍵詞的內在邏輯關(guān)系進(jìn)行自動(dòng)匹配,給出搜索提示,糾正用戶(hù)輸入錯誤。
(6)具有熱詞自動(dòng)排序和顯示功能,可自動(dòng)統計搜索關(guān)鍵詞的搜索頻度,將某一時(shí)間段內搜索量較高的關(guān)鍵詞作為搜索熱詞,并根據熱度動(dòng)態(tài)自動(dòng)調整排序。
(7)支持拼音搜索功能,采用詞語(yǔ)智能拼音匹配模式,并結合關(guān)鍵詞提醒聯(lián)想功能,實(shí)現拼音和中文友好聯(lián)系的搜索功能。
(8)系統支持管理員定義屏蔽詞和停用詞的搜索,當用戶(hù)輸入收錄
的詞匯時(shí),系統不展示搜索結果信息。
(9)支持多個(gè)關(guān)鍵詞搜索和整句搜索。
(10)系統使用基于文檔語(yǔ)義的技術(shù)實(shí)現同一站點(diǎn)內搜索結果信息的自動(dòng)排重,即“相同”的文檔在索引過(guò)程中僅被索引一次,解決大量相同文檔的搜索問(wèn)題,提高索引效率,幫助用戶(hù)快速找到搜索結果。
(11)對含有圖片的信息,其搜索結果列表應顯示其縮略圖;
(12)系統具有檢索結果優(yōu)先顯示置頂功能。
?。ㄊ┲悄芡扑]系統
(1)根據網(wǎng)站用戶(hù)訪(fǎng)問(wèn)行為,結合網(wǎng)站數據分析,找到網(wǎng)站訪(fǎng)問(wèn)熱點(diǎn),自動(dòng)聚合相關(guān)信息(即相關(guān)文件、政策、咨詢(xún)類(lèi)信息),實(shí)現網(wǎng)站信息智能推薦。
(2)可根據關(guān)鍵詞、熱詞等條件分析信息之間的直接聯(lián)系或間接關(guān)系,自動(dòng)分析、梳理、聚類(lèi)展示。
(3)可自動(dòng)進(jìn)行專(zhuān)題信息匯聚,通過(guò)數據采集技術(shù),獲取相關(guān)信息進(jìn)行集中
管理和存儲,根據用戶(hù)訪(fǎng)問(wèn)習慣,進(jìn)行數據的重組、拼裝,聚合,形成專(zhuān)題欄目;也可根據各專(zhuān)題的關(guān)注度,對推薦專(zhuān)題及相應的頁(yè)面表現位置進(jìn)行展示順序的自動(dòng)調整,供公眾訪(fǎng)問(wèn)。

?。ㄊ唬┲悄軉?wèn)答系統
(1)能夠深度挖掘網(wǎng)站群信息內容,建立和完善智能應答知識庫,可根據用戶(hù)自定義規則,通過(guò)信息聚合技術(shù),按照信息采集、聚合、挖掘和檢索流程,實(shí)現跨部門(mén)、跨行業(yè)的信息整合與資源共享。
(2)能夠自動(dòng)將咨詢(xún)問(wèn)題保存入庫,可自定義站點(diǎn)檢索到相關(guān)咨詢(xún)問(wèn)題,可實(shí)時(shí)預處理用戶(hù)的輸入信息,根據輸入內容與后臺檢索引擎交互,自動(dòng)糾錯,實(shí)時(shí)提示相關(guān)信息,引導類(lèi)似問(wèn)題進(jìn)行解答。
(3)可利用信息資源庫及應答知識庫中的信息,即時(shí)自動(dòng)回答用戶(hù)提出的問(wèn)題,向用戶(hù)展示相關(guān)度較高的信息。
(4)能夠充分使用站群內所有站點(diǎn)的信息資源,咨詢(xún)問(wèn)題答復內容可由平臺下多個(gè)站點(diǎn)信息數據組成關(guān)聯(lián)頁(yè)面提供給用戶(hù)。
(5)能夠實(shí)現多樣化展現方式,可以預分類(lèi)政務(wù)資源,將多個(gè)網(wǎng)站中的同類(lèi)欄目合并為一個(gè)分類(lèi),為用戶(hù)按分類(lèi)展現更全面精準的搜索結果。
(6)要求具備自學(xué)習功能,能夠自動(dòng)豐富知識庫,對于無(wú)法解決的問(wèn)題可自動(dòng)轉人工解答。
?。ㄊ┮苿?dòng)門(mén)戶(hù)系統
(1)要求采用HTML5網(wǎng)站頁(yè)面應自適應技術(shù),能夠實(shí)現不同移動(dòng)終端(例如蘋(píng)果、安卓系統) 訪(fǎng)問(wèn)移動(dòng)門(mén)戶(hù)時(shí)自適應展示,能夠在各種訪(fǎng)問(wèn)終端下保持完整良好的頁(yè)面布局和內容可讀性。
(2)要求移動(dòng)端與PC端使用同一域名進(jìn)行訪(fǎng)問(wèn),系統自動(dòng)識別訪(fǎng)問(wèn)終端并自適應頁(yè)面展示效果。
(3)要求移動(dòng)門(mén)戶(hù)所展示信息不再二次錄入,統一由站點(diǎn)內容管理系統提供,以保證數據來(lái)源的統一性。
(4)要求提供最新新聞、政務(wù)公開(kāi)、互動(dòng)交流、解讀回應、民意調查、輿論引導、政務(wù)服務(wù)、政府辦公等信息內容的展示。
(5)要求支持可定制欄目訪(fǎng)問(wèn)。
五、其他需求說(shuō)明
1.網(wǎng)站兼容性要求
要求網(wǎng)站頁(yè)面具有很好的兼容性,支持IE、Chrome、FireFox和其他主流瀏覽器,支持安卓和IOS移動(dòng)終端瀏覽。
2.UI/UE設計
(1)界面設計需要突出地方特色
(2)文字,圖形色彩統一,搭配合理,界面清楚整潔,層次結構清楚。
(3)統一首頁(yè)和其他各級頁(yè)面的排版風(fēng)格。
(4)頁(yè)面富有時(shí)代氣息和美感,色彩搭配穩重、合理、大氣。
(5)多媒體、動(dòng)畫(huà)頁(yè)面要求豐富而生動(dòng)。
3.子站設計要求
(1)滿(mǎn)足各子站個(gè)性化頁(yè)面設計需求,根據各部門(mén)網(wǎng)站管理人員要求進(jìn)行設計與實(shí)施。
(2)本次頁(yè)面設計主要從以下幾個(gè)方面進(jìn)行規劃:頁(yè)面風(fēng)格、頁(yè)面人性化和易用性、頁(yè)面內容、頁(yè)面結構等,圍繞信息公開(kāi)、辦事服務(wù)、互動(dòng)交流等功能定位,設計門(mén)戶(hù)網(wǎng)站頁(yè)面框架,清晰、合理、科學(xué)展現網(wǎng)站內容,避免累贅和頁(yè)面冗余。
4.歷史數據遷移要求
(1)要求提出詳盡的網(wǎng)站數據遷移方案。
(2)要求將實(shí)施集約化的網(wǎng)站的全部數據,收錄
各站點(diǎn)欄目信息、新聞信息、公開(kāi)信息、互動(dòng)信息、用戶(hù)信息、用戶(hù)對應權限、圖片、附件、多媒體文件等數據平穩遷移至德陽(yáng)市政府網(wǎng)站集約化平臺,確保不丟失任何有效數據,處理好新網(wǎng)站欄目信息與歷史數據的對應關(guān)系。
(3)要求保證集約化網(wǎng)站切換的平滑過(guò)渡,做好數據的同步更新。
5.硬件及部署要求
投標人必須詳細列出項目的硬件需求,即政務(wù)云平臺虛擬機數量及資源參數,以及系統的部署方案。
六、項目實(shí)施、培訓
?。ㄒ唬╉椖靠⒐を炇找?br /> 按中華人民共和國現行項目建設規范和合同規定的驗收評定標準等要求進(jìn)行驗收。
根據施工進(jìn)度情況,按照標志性工作成果劃分,分期進(jìn)行檢查、驗收。
2.實(shí)施要求
投標人應具體說(shuō)明實(shí)施本項目擬采用方案,確保至少兩人駐場(chǎng)實(shí)施,團隊
組織方式和保障力量,中標單位實(shí)施過(guò)程中出現資源、速度、質(zhì)量協(xié)調控制不力、采購方有權更換責任人。
3.測試要求
投標供應商在實(shí)施過(guò)程中必須制定整體的測試方案,保證各子系統聯(lián)接正確,數據傳送正常。測試方案要明確測試關(guān)鍵點(diǎn),分單元測試、邊緣測試、整體測試等。測試方法應包括模塊測試、回歸測試、壓力測試、性能測試、功能測試、數據測試、安全測試、系統測試等。測試內容必須包括功能要求、可靠性、安全性、可擴充性、可維護性、平臺移植性、整體性能、與其他平臺接口等,系統試運行期不低于三個(gè)月。
4.驗收要求
投標供應商應負責在項目用戶(hù)驗收前將系統的全部相關(guān)的系統軟件,各階段開(kāi)發(fā)文檔,平臺及其他應用系統交互接口功能的源代碼和數據表結構,以及有關(guān)產(chǎn)品的系統說(shuō)明書(shū)、安裝手冊、維護手冊、技術(shù)文件、資料及安裝、測試、驗收報告等文檔匯集成冊交付項目單位。只有文檔齊全后方可組織驗收。對整個(gè)項目的驗收包括檢查整個(gè)系統是否實(shí)現了招標人所要求的功能,是否與投標供應商提出的解決方案中既定目標功能完全一致。
投標供應商必須根據系統總體設計方案提出驗收細則和驗收文檔清單(收錄
需求調研、系統分析、軟件設計、軟件開(kāi)發(fā)、系統測試、實(shí)施上線(xiàn)、運行維護等階段),招標人將根據驗收方案對系統每個(gè)部分逐一進(jìn)行項目驗收。
5.文檔要求
投標供應商提供的技術(shù)文件應該真實(shí)、全面、完整、詳細,應以中文書(shū)寫(xiě)。投標供應商提供的技術(shù)文件應是能滿(mǎn)足系統運行所需的安裝調試、操作使用及維護管理等的詳細技術(shù)資料。
投標供應商應負責在項目最終驗收時(shí)將系統從合同簽定之日起所有關(guān)于本項目的文檔資料(包括初步驗收文檔的版本更新和試運行期產(chǎn)生的文檔)交付采購人。
招標人認為必要的其他文檔。
?。ǘ┡嘤柍兄Z
供應商技術(shù)培訓及相關(guān)系統的基礎培訓,內容包括軟件安裝調試及初始化、使用等的基本操作培訓。供應商須制定出詳細完整的培訓方案,包括培訓的具體內容、培訓方式(現場(chǎng)培訓或集中培訓)、人數、教師、日程安排、資料等。應能使采購人相關(guān)人員獨立操作、維護、管理,確保系統能正常安全運行。
供應商應提供的詳細培訓方案必須包括:(1)集群管理員操作培訓;(2)各
部門(mén)管理員、應用軟件操作員等的基本操作培訓。
實(shí)際培訓時(shí)間和地點(diǎn)按中標人與采購人商定的為準。
七、售后服務(wù)技術(shù)需求
售后服務(wù)包括但不限于下列服務(wù):
1.網(wǎng)站頁(yè)面優(yōu)化服務(wù)
(1)網(wǎng)站信息維護培訓指導。包括網(wǎng)站信息的增、刪、查、改等操作的指導和問(wèn)題解答;添加圖片及附件操作指導;網(wǎng)站靜態(tài)頁(yè)面生成等操作指導。
(2)網(wǎng)站頁(yè)面的圖片、文字排版和調整。包括網(wǎng)頁(yè)圖片的制作、更換、布局調整,文字的內容、格式、鏈接等的修改。
(3)保證網(wǎng)站頁(yè)面顯示正常。解決文字或圖片內容撐出、內容不顯示或顯示不正確、頁(yè)面文字出現亂碼、頁(yè)面出現錯誤報告、頁(yè)面在有的瀏覽器上顯示不正確、頁(yè)面沒(méi)有找到、網(wǎng)頁(yè)不能訪(fǎng)問(wèn)等問(wèn)題。
2. 網(wǎng)站內容管理平臺及選件維護服務(wù)
(1)對國家及省政府最新要求的響應
及時(shí)響應國家及省政府對政府門(mén)戶(hù)網(wǎng)站、集約化建設及互聯(lián)網(wǎng)+政務(wù)服務(wù)相關(guān)內容的建設要求,對門(mén)戶(hù)網(wǎng)站前臺服務(wù)內容進(jìn)行調整。
(2)模版維護服務(wù)
每月一次。包括:定期對現有網(wǎng)站巡檢,對現有的模版存在的不足進(jìn)行調優(yōu),如排版不合適、格式不統一、色調不一致、內容塊錯位、字體大小不一致、文字沒(méi)對齊等情況,但不涉及到頁(yè)面新的風(fēng)格。對現有的模版調整,包括添加刪除專(zhuān)題鏈接、頁(yè)面局部細節樣式調整,錯字,錯鏈,圖標替換等,提交《網(wǎng)站模版優(yōu)化記錄》。
(3)常規檢查維護
每月一次。包括:各服務(wù)器運行狀況、存儲空間狀況、軟件運行狀況、備份系統狀況等。并提出現有問(wèn)題和解決方法,并提交《網(wǎng)站常規檢查維護運行狀況報告》。
(4)專(zhuān)題維護
根據用戶(hù)需求提供專(zhuān)題制作協(xié)助服務(wù)。
(5)產(chǎn)品版本升級
不定期提供。主要幫助客戶(hù)不斷完善產(chǎn)品的功能和系統穩定性。每次升級要對升級的版本、工作做好日志記錄,并提交《版本升級記錄表》。
3、技術(shù)運維服務(wù)
(1)備份服務(wù)
對門(mén)戶(hù)網(wǎng)站系統涉及到的內容進(jìn)行備份,包括數據庫每天備份、網(wǎng)站應用程
序備份、網(wǎng)站所有補丁備份、項目涉及到的文檔進(jìn)行備份等。提交《系統備份檢查表》,內容包括備份聯(lián)系人、聯(lián)系電話(huà)、時(shí)間、路徑、內容等。
(2)錯誤日志分析
對網(wǎng)站涉及到的所有日志(包括中間件等產(chǎn)品)記錄要進(jìn)行定期查看,找出錯誤內容。提交《日志錯誤分析表》。
4、服務(wù)質(zhì)量要求
(1)質(zhì)量保證期限及費用
系統驗收合格、雙方簽署驗收書(shū)之日起,為本次建設內容中的子站提供至少1年維保服務(wù)。在系統維護期內,開(kāi)發(fā)的軟件應提供免費升級服務(wù)。維保服務(wù)到期后,應承諾對系統的升級僅收取成本費。
(2)售后服務(wù)方案
中標人需要提供詳細的售后服務(wù)方案,包括服務(wù)人員、措施、應急預案及相關(guān)流程等內容。在安裝、調試及系統免費維護期內,必須提供系統故障的應急處理方案。承諾所投產(chǎn)品系統不存在“后門(mén)”問(wèn)題。
(3)服務(wù)響應要求
中標人承諾提供現場(chǎng)服務(wù)人員,且能夠提供7*24小時(shí)響應服務(wù),一般問(wèn)題30分鐘之內解決,重大問(wèn)題4小時(shí)內解決。
說(shuō)明:
1、歡迎供應商提供服務(wù)保障等于或高于該基本要求的服務(wù)。
2、本章的要求不能作為資格性條件要求評標,如存在資格性條件要求,應當認定招標文件編制存在重大缺陷,評標委員會(huì )應當停止評標。
干貨教程:【Python】抖音采集話(huà)題/音樂(lè )/用戶(hù)作品和喜歡+調用Aria2下載+fire
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 253 次瀏覽 ? 2022-11-22 16:26
抖音集合開(kāi)源倉庫
介紹
Python 獲取數據 + Vue 寫(xiě)入接口 + Aria2 下載
根據抖音的各種鏈接或ID,通過(guò)網(wǎng)頁(yè)界面采集視頻作品并下載到本地計算機。
支持用戶(hù)主頁(yè)鏈接或sec_uid/主題挑戰和音樂(lè )配樂(lè )鏈接或ID。
支持下載喜歡的列表(需要喜歡的列表可見(jiàn))。
使用0x00安裝依賴(lài)項
在程序目錄中打開(kāi)命令行,然后輸入
pip install -r requirements.txt
0x01 使用界面
雙擊打開(kāi)啟動(dòng).bat,或在程序目錄中打開(kāi)命令行,輸入
python ui.py
0x02 直接修改 douyin.py 中的相關(guān)參數
完全不懂 Python 的朋友使用命令行或操作界面。
0x03 使用 exec.py 直接從命令行運行以查看命令列表,或使用 -h 參數查看幫助
python exec.py
python exec.py -h
python exec.py download -h
python exec.py download_batch -h
使用函數名稱(chēng)調用程序
--type??指定下載類(lèi)型,默認值:--type=user
--limit 指定采集數量,默認值:--limit=0(不限制)
例如,采集
用戶(hù)的所有作品:
python exec.py download https://v.douyin.com/xxxx/
python exec.py download 用戶(hù)的secuid
例如,采集
用戶(hù)喜歡的前 10 部作品:
python exec.py download MS4wLjABAAAAl7TJWjJJrnu11IlllB6Mi5V9VbAsQo1N987guPjctc8 --type=like --limit=10
python exec.py download 用戶(hù)的secuid
例如,采集
音樂(lè )配樂(lè )的前 10 首作品:
python exec.py download https://v.douyin.com/xxxx/ --type=music --limit=10
python exec.py download 音樂(lè )ID --type=music --limit=10
TODO知識點(diǎn):抖音相關(guān)Aria2相關(guān)Python相關(guān)命令行模塊、火相關(guān)UI模塊、pywebview相關(guān)抖音集合部分源碼
# -*- encoding: utf-8 -*-
'''
@File? ? :? ?douyin.py
@Time? ? :? ?2021年03月12日 18:16:57 星期五
@Author??:? ?erma0
@Version :? ?1.0
@Link? ? :? ?https://erma0.cn
@Desc? ? :? ?抖音用戶(hù)作品采集
'''
import json
import os
import time
from urllib.parse import parse_qs, urlparse
import requests
from download import Download
class Douyin(object):
? ? """
? ? 抖音用戶(hù)類(lèi)
? ? 采集作品列表
? ? """
? ? def __init__(self, param: str, limit: int = 0):
? ?? ???"""
? ?? ???初始化用戶(hù)信息
? ?? ???參數自動(dòng)判斷:ID/URL
? ?? ???"""
? ?? ???self.limit = limit
? ?? ???self.http = requests.Session()
? ?? ???self.url = ''
? ?? ???self.type = 'unknow'
? ?? ???self.download_path = '暫未定義目錄'
? ?? ???# ↑ 預定義屬性,避免調用時(shí)未定義 ↑
? ?? ???self.param = param.strip()
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'??# sign可以固定
? ?? ???self.__get_type()??# 判斷當前任務(wù)類(lèi)型:鏈接/ID
? ?? ???self.aria2 = Download()??# 初始化Aria2下載服務(wù),先不指定目錄了,在設置文件名的時(shí)候再加入目錄
? ?? ???self.has_more = True
? ?? ???self.finish = False
? ?? ???# 字典格式方便入庫用id做key/取值/修改對應數據,但是表格都接收數組
? ?? ???self.videosL = []??#列表格式
? ?? ???# self.videos = {}??#字典格式
? ?? ???self.gids = {}??# gid和作品序號映射
? ? def __get_type(self):
? ?? ???"""
? ?? ???判斷當前任務(wù)類(lèi)型
? ?? ???鏈接/ID
? ?? ???"""
? ?? ???if '://' in self.param:??# 鏈接
? ?? ?? ?? ?self.__url2redirect()
? ?? ???else:??# ID
? ?? ?? ?? ?self.id = self.param
? ? def __url2redirect(self):
? ?? ???"""
? ?? ???取302跳轉地址
? ?? ???短連接轉長(cháng)鏈接
? ?? ???"""
? ?? ???headers = {??# 以前作品需要解析去水印,要用到移動(dòng)端UA,現在不用了
? ?? ?? ?? ?'User-Agent':
? ?? ?? ?? ?'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/89.0.4389.82'
? ?? ???}
? ?? ???try:
? ?? ?? ?? ?r = self.http.head(self.param, headers=headers, allow_redirects=False)
? ?? ?? ?? ?self.url = r.headers['Location']
? ?? ???except:
? ?? ?? ?? ?self.url = self.param
? ? def __url2id(self):
? ?? ???try:
? ?? ?? ?? ?self.id = urlparse(self.url).path.split('/')[3]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def __url2uid(self):
? ?? ???try:
<p>
? ?? ?? ?? ?query = urlparse(self.url).query
? ?? ?? ?? ?self.id = parse_qs(query)['sec_uid'][0]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def get_sign(self):
? ?? ???"""
? ?? ???網(wǎng)頁(yè)sign算法,現在不需要了,直接固定
? ?? ???"""
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'
? ?? ???return self.sign
? ? def get_user_info(self):
? ?? ???"""
? ?? ???取用戶(hù)信息
? ?? ???查詢(xún)結果在 self.user_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2uid()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('user_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.user_info = info
? ?? ???# 下載路徑
? ?? ???username = '{}_{}_{}'.format(self.user_info.get('short_id', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.user_info.get('nickname', '無(wú)昵稱(chēng)'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_challenge_info(self):
? ?? ???"""
? ?? ???取話(huà)題挑戰信息
? ?? ???查詢(xún)結果在 self.challenge_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/info/?ch_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('ch_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.challenge_info = info
? ?? ???# 話(huà)題挑戰下載路徑
? ?? ???username = '{}_{}_{}'.format(self.challenge_info.get('cid', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.challenge_info.get('cha_name', '無(wú)標題'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_music_info(self):
? ?? ???"""
? ?? ???取音樂(lè )原聲信息
? ?? ???查詢(xún)結果在 self.music_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/info/?music_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('music_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.music_info = info
? ?? ???# 音樂(lè )原聲下載路徑
? ?? ???username = '{}_{}_{}'.format(self.music_info.get('mid', '0'), self.music_info.get('title', '無(wú)標題'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def crawling_users_post(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品
? ?? ???"""
? ?? ???self.type = 'post'
? ?? ???self.__crawling_user()
? ? def crawling_users_like(self):
? ?? ???"""
? ?? ???采集用戶(hù)喜歡
? ?? ???"""
? ?? ???self.type = 'like'
? ?? ???self.__crawling_user()
? ? def crawling_challenge(self):
? ?? ???"""
? ?? ???采集話(huà)題挑戰
? ?? ???"""
? ?? ???self.type = 'challenge'
? ?? ???self.get_challenge_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... QFzfg
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "ch_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('話(huà)題挑戰采集出錯')
? ?? ???print('話(huà)題挑戰采集完成')
? ? def crawling_music(self):
? ?? ???"""
? ?? ???采集音樂(lè )原聲
? ?? ???"""
? ?? ???self.type = 'music'
? ?? ???self.get_music_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... OVC5j
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/list/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "music_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('音樂(lè )原聲采集出錯')
? ?? ???print('音樂(lè )原聲采集完成')
? ? def __crawling_user(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品/喜歡
? ?? ???"""
? ?? ???self.get_user_info()??# 取當前用戶(hù)信息,昵稱(chēng)用做下載目錄
? ?? ???max_cursor = 0
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/aweme/{}/'.format(self.type)
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "sec_uid": self.id,
? ?? ?? ?? ?? ? "count": "21",
? ?? ?? ?? ?? ? "max_cursor": max_cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "_signature": self.sign,
? ?? ?? ?? ?? ? "dytk": ""
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? max_cursor = res['max_cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('作品采集出錯')
? ?? ???print('作品采集完成')
? ? def __append_videos(self, res):
? ?? ???"""
? ?? ???數據入庫
? ?? ???"""
? ?? ???if res.get('aweme_list'):
? ?? ?? ?? ?for item in res['aweme_list']:
? ?? ?? ?? ?? ? info = item['statistics']
? ?? ?? ?? ?? ? info.pop('forward_count')
? ?? ?? ?? ?? ? info.pop('play_count')
? ?? ?? ?? ?? ? info['desc'] = Download.title2path(item['desc'])??# 需提前處理非法字符串
? ?? ?? ?? ?? ? info['uri'] = item['video']['play_addr']['uri']
? ?? ?? ?? ?? ? info['play_addr'] = item['video']['play_addr']['url_list'][0]
? ?? ?? ?? ?? ? info['dynamic_cover'] = item['video']['dynamic_cover']['url_list'][0]
? ?? ?? ?? ?? ? info['status'] = 0??# 下載進(jìn)度狀態(tài);等待下載:0,下載中:0.xx;下載完成:1
? ?? ?? ?? ?? ? # 列表格式
? ?? ?? ?? ?? ? self.videosL.append(info)
? ?? ?? ?? ?? ? # 字典格式
? ?? ?? ?? ?? ? # self.videos[info['aweme_id']] = info
? ?? ?? ?? ?? ? # 此處可以直接添加下載任務(wù),不過(guò)考慮到下載占用網(wǎng)速,影響采集過(guò)程,所以采集完再下載
? ?? ?? ?? ?if self.limit:
? ?? ?? ?? ?? ? more = len(self.videos) - self.limit
? ?? ?? ?? ?? ? if more >= 0:
? ?? ?? ?? ?? ?? ???# 如果給出了限制采集數目,超出的刪除后直接返回
? ?? ?? ?? ?? ?? ???self.has_more = False
? ?? ?? ?? ?? ?? ???# 列表格式
? ?? ?? ?? ?? ?? ???self.videosL = self.videosL[:self.limit]
? ?? ?? ?? ?? ?? ???# 字典格式
? ?? ?? ?? ?? ?? ???# for i in range(more):
? ?? ?? ?? ?? ?? ???#? ???self.videos.popitem()
? ?? ?? ?? ?? ?? ???# return
? ?? ???else:??# 還有作品的情況下沒(méi)返回數據則進(jìn)入這里
? ?? ?? ?? ?print('未采集完成,但返回作品列表為空')
? ? def download_all(self):
? ?? ???"""
? ?? ???作品抓取完成后,統一添加下載任務(wù)
? ?? ???可選擇在外部注冊回調函數,監聽(tīng)下載任務(wù)狀態(tài)
? ?? ???"""
? ?? ???for id, video in enumerate(self.videosL):
? ?? ?? ?? ?# for id, video in self.videos.items():
? ?? ?? ?? ?gid = self.aria2.download(url=video['play_addr'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???filename='{}/{}_{}.mp4'.format(self.download_path, video['aweme_id'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?video['desc'])
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???# ,options={'gid': id}??# 指定gid
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???)
? ?? ?? ?? ?self.gids[gid] = id??# 因為傳入gid必須16位,所以就不指定gid了,另存一個(gè)字典映射
? ?? ???print('下載任務(wù)投遞完成')</p>
技巧:拼多多大神是怎么復制抖音爆款上傳到自己店鋪的?這個(gè)工具無(wú)需授權
隨著(zhù)抖音小店的火爆,不少拼多多商家開(kāi)始在抖音上尋找爆款商品,急需一款抖音寶到拼多多小店收款的工具。
今天要跟大家分享的是一款支持斗尚拼的工具。不僅可以采集復制寶物上架,還可以采集寶物進(jìn)行分析優(yōu)化。下面我主要介紹大家用的比較多的3個(gè)工具:
?、賹氊悘椭疲阂绘I復制抖音小店寶貝上傳至拼多多,支持批量采集
,可快速完成發(fā)貨!
工具支持多次開(kāi)啟,無(wú)需授權,不綁定電腦。店鋪團版支持5-200家店鋪!
?、趫D片處理器:抖音店鋪寶貝圖片一鍵采集
工具限時(shí)免費,快來(lái)試用吧~
本工具可以一鍵采集下載淘喜、拼多多、京東、豆店寶的主圖、sku圖、詳情頁(yè)、750詳情圖、主圖視頻、搜索列表展示圖等,還可以自動(dòng)拼接詳情圖片。
寶貝優(yōu)化過(guò)程中,賣(mài)家可以采集競品寶貝圖片進(jìn)行分析,并一鍵導出數據,方便美工學(xué)習和模仿。
?、蹖氊愒斍椋ㄔu論/sku/買(mǎi)家秀/問(wèn)大家)分析器:一鍵采集
抖音店鋪寶貝評論/sku/買(mǎi)家秀/問(wèn)大家
工具限時(shí)免費,快來(lái)試用吧~
一鍵采集
淘喜、拼多多、京東、豆店等各大平臺評論、sku占比分析、下載買(mǎi)家秀等,并支持一鍵拆分評論根、根占比分析、挖掘產(chǎn)品賣(mài)點(diǎn)。重點(diǎn)采集
問(wèn)大家,分析買(mǎi)家痛點(diǎn)。
工具免費分享,有需要的賣(mài)家可以免費試用!
下面,小編就為大家詳細講解一下拼多多寶貝復制工具的使用方法:
1.采集
寶貝
數據來(lái)源包括淘寶/天貓、1688、抖音小店、拼多多批發(fā)等平臺。也就是說(shuō),賣(mài)家可以在淘寶、1688、抖音小店、批發(fā)商上采集
寶貝并上傳到自己的店鋪。
工具限時(shí)免費,快來(lái)試用吧~
淘寶平臺采集寶貝數據,需要登錄普通買(mǎi)家賬號。如果采集
太多,可以在多個(gè)帳戶(hù)之間切換。1688和淘寶賬號一樣。
無(wú)需登錄即可采集
拼多多批發(fā)寶貝數據。如果您采集
了拼多多寶貝的數據,可以通過(guò)手機號和token登錄。
多多寶的采集
方式可以通過(guò)關(guān)鍵詞和分類(lèi)采集
,也可以全店采集
、其他平臺采集
、復制或批量導入。
2.上傳配置
寶貝收好后,進(jìn)入配置頁(yè)面:
工具限時(shí)免費,快來(lái)試用吧~
還沒(méi)有收到工具的賣(mài)家可以免費試用,還有限時(shí)會(huì )員權限!
一、價(jià)格
拼多多上的商品價(jià)格包括單價(jià)、單價(jià)、折扣價(jià)、最低SKU價(jià)等,采集
淘寶寶貝一般默認為折扣價(jià),折扣價(jià)顯示如下圖:
如果優(yōu)惠價(jià)格是臨時(shí)活動(dòng),沒(méi)有優(yōu)惠后,源鏈接價(jià)格會(huì )上漲。
拼多多默認單價(jià),可以通過(guò)加百分比、加減固定金額、指定價(jià)格等方式設置。
工具限時(shí)免費,快來(lái)試用吧~
2. 圖片
主圖可以默認不處理,也可以選擇以下幾張作為主圖。采集到的淘寶寶貝只有5張主圖,工具可以自動(dòng)補全10張主圖。
細節圖也可以不處理,也可以去掉指定位置的地圖,保留編號,也可以插入自定義細節圖,自定義細節加水印。
對于采集到的淘寶寶貝,高度超過(guò)1500的詳細圖片可以自動(dòng)壓縮分割,壓縮可以減少圖片空間的占用。
注意:處理圖片時(shí),一定要勾選【使用圖片空間上傳圖片】!如果你復制視頻,你需要有上傳視頻的權限!
3.標題
標題設置包括標題清詞(啟用本地自定義過(guò)濾)、標題過(guò)濾詞、標題替換(寶貝ID=新標題)等。標題可以通過(guò)添加前綴/后綴或直接替換來(lái)處理。
可以設置新標題只保留采集
寶貝標題前的字符數。特殊分類(lèi)支持長(cháng)標題校驗【上傳寶貝標題支持10個(gè)字符】。
標題重組可以分裂根,隨機打亂和重組。
4.類(lèi)別
因為商品類(lèi)目是跨平臺的,只是部分商品的類(lèi)目分類(lèi)會(huì )有所不同。需要手動(dòng)指定四級類(lèi)別(每個(gè)類(lèi)別級別都必須選擇),但大多數情況下默認匹配上一個(gè)類(lèi)別。
5.單品
SKU規格配置,不同平臺有不同的SKU屬性,可以過(guò)濾/替換符號和違禁詞,自動(dòng)分割SKU名稱(chēng)和備注,商家也可以自定義SKU。
注意:如果沒(méi)有sku,默認添加一個(gè)sku,最大數量限制為24個(gè)!
6.屬性
商品類(lèi)型可根據實(shí)際情況選擇,如普通商品、虛擬商品、進(jìn)口商品、積分卡或海外抄送個(gè)人郵寄等。
設置品牌(可以選擇不使用該品牌或更換其他品牌),設置產(chǎn)品編碼,是否支持假一賠十,7天無(wú)理由,壞了賠,是否秒-手/虛擬產(chǎn)品,您還可以自定義屬性。
7. 運輸
商家可以設置物流重量、物流類(lèi)型、發(fā)貨時(shí)間。
還沒(méi)有收到工具的賣(mài)家,點(diǎn)擊↓即可免費試用!
3.上傳
點(diǎn)擊保存設置后,會(huì )跳轉至上傳頁(yè)面,如下圖:
工具限時(shí)免費,快來(lái)試用吧~
賣(mài)家可以通過(guò)瀏覽器操作將寶貝信息上傳至列表,保存至草稿箱,或直接上架。如果上傳失敗,則不會(huì )保存到草稿箱。
此外,該頁(yè)面還可以清空上傳列表,刪除勾選的寶貝,去除上傳成功導出失敗的鏈接,選擇運費模板,一鍵勾選跳過(guò)重復上傳的寶貝。
繁瑣的操作也變得簡(jiǎn)單方便。通過(guò)工具裝貨,不僅可以解放雙手,還可以減少失誤,大大提高工作效率。
4.寶貝管理
對于店鋪寶貝,賣(mài)家可以在寶貝列表中選擇時(shí)間范圍內的店鋪、類(lèi)目、商品id數據,批量下架、修改價(jià)格和庫存等,一鍵刪除/清空寶貝。
工具限時(shí)免費,快來(lái)試用吧~
可設置清潔寶貝的創(chuàng )建時(shí)間、訪(fǎng)問(wèn)人數、采集
人數、銷(xiāo)量等,并可一鍵導出數據,查看修改失敗記錄。
注:右鍵列表可以查看上一個(gè)寶貝的鏈接。
五、服務(wù)保障
這款寶貝復制工具不僅功能穩定,而且還有完善的服務(wù)體系。多名技術(shù)人員24/7在線(xiàn),隨時(shí)處理用戶(hù)問(wèn)題。
無(wú)論是工具安裝問(wèn)題,還是日常操作問(wèn)題,賣(mài)家總能找到工作人員實(shí)時(shí)溝通。
同時(shí),工具技術(shù)團隊會(huì )定期采集
用戶(hù)需求,進(jìn)行有針對性的開(kāi)發(fā)和研發(fā),并保持工具功能版本不斷更新,滿(mǎn)足大家對商品的需求。
如果您需要工具,可以免費試用!
以上是寶貝復制工具的概況。功能穩定,服務(wù)保障完善。商戶(hù)可以輕松完成裝貨操作,大大提高工作效率。 查看全部
干貨教程:【Python】抖音采集話(huà)題/音樂(lè )/用戶(hù)作品和喜歡+調用Aria2下載+fire
抖音集合開(kāi)源倉庫
介紹
Python 獲取數據 + Vue 寫(xiě)入接口 + Aria2 下載
根據抖音的各種鏈接或ID,通過(guò)網(wǎng)頁(yè)界面采集視頻作品并下載到本地計算機。
支持用戶(hù)主頁(yè)鏈接或sec_uid/主題挑戰和音樂(lè )配樂(lè )鏈接或ID。
支持下載喜歡的列表(需要喜歡的列表可見(jiàn))。
使用0x00安裝依賴(lài)項
在程序目錄中打開(kāi)命令行,然后輸入
pip install -r requirements.txt
0x01 使用界面
雙擊打開(kāi)啟動(dòng).bat,或在程序目錄中打開(kāi)命令行,輸入
python ui.py
0x02 直接修改 douyin.py 中的相關(guān)參數
完全不懂 Python 的朋友使用命令行或操作界面。
0x03 使用 exec.py 直接從命令行運行以查看命令列表,或使用 -h 參數查看幫助
python exec.py
python exec.py -h
python exec.py download -h
python exec.py download_batch -h
使用函數名稱(chēng)調用程序
--type??指定下載類(lèi)型,默認值:--type=user
--limit 指定采集數量,默認值:--limit=0(不限制)
例如,采集
用戶(hù)的所有作品:
python exec.py download https://v.douyin.com/xxxx/
python exec.py download 用戶(hù)的secuid
例如,采集
用戶(hù)喜歡的前 10 部作品:
python exec.py download MS4wLjABAAAAl7TJWjJJrnu11IlllB6Mi5V9VbAsQo1N987guPjctc8 --type=like --limit=10
python exec.py download 用戶(hù)的secuid
例如,采集
音樂(lè )配樂(lè )的前 10 首作品:
python exec.py download https://v.douyin.com/xxxx/ --type=music --limit=10
python exec.py download 音樂(lè )ID --type=music --limit=10
TODO知識點(diǎn):抖音相關(guān)Aria2相關(guān)Python相關(guān)命令行模塊、火相關(guān)UI模塊、pywebview相關(guān)抖音集合部分源碼
# -*- encoding: utf-8 -*-
'''
@File? ? :? ?douyin.py
@Time? ? :? ?2021年03月12日 18:16:57 星期五
@Author??:? ?erma0
@Version :? ?1.0
@Link? ? :? ?https://erma0.cn
@Desc? ? :? ?抖音用戶(hù)作品采集
'''
import json
import os
import time
from urllib.parse import parse_qs, urlparse
import requests
from download import Download
class Douyin(object):
? ? """
? ? 抖音用戶(hù)類(lèi)
? ? 采集作品列表
? ? """
? ? def __init__(self, param: str, limit: int = 0):
? ?? ???"""
? ?? ???初始化用戶(hù)信息
? ?? ???參數自動(dòng)判斷:ID/URL
? ?? ???"""
? ?? ???self.limit = limit
? ?? ???self.http = requests.Session()
? ?? ???self.url = ''
? ?? ???self.type = 'unknow'
? ?? ???self.download_path = '暫未定義目錄'
? ?? ???# ↑ 預定義屬性,避免調用時(shí)未定義 ↑
? ?? ???self.param = param.strip()
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'??# sign可以固定
? ?? ???self.__get_type()??# 判斷當前任務(wù)類(lèi)型:鏈接/ID
? ?? ???self.aria2 = Download()??# 初始化Aria2下載服務(wù),先不指定目錄了,在設置文件名的時(shí)候再加入目錄
? ?? ???self.has_more = True
? ?? ???self.finish = False
? ?? ???# 字典格式方便入庫用id做key/取值/修改對應數據,但是表格都接收數組
? ?? ???self.videosL = []??#列表格式
? ?? ???# self.videos = {}??#字典格式
? ?? ???self.gids = {}??# gid和作品序號映射
? ? def __get_type(self):
? ?? ???"""
? ?? ???判斷當前任務(wù)類(lèi)型
? ?? ???鏈接/ID
? ?? ???"""
? ?? ???if '://' in self.param:??# 鏈接
? ?? ?? ?? ?self.__url2redirect()
? ?? ???else:??# ID
? ?? ?? ?? ?self.id = self.param
? ? def __url2redirect(self):
? ?? ???"""
? ?? ???取302跳轉地址
? ?? ???短連接轉長(cháng)鏈接
? ?? ???"""
? ?? ???headers = {??# 以前作品需要解析去水印,要用到移動(dòng)端UA,現在不用了
? ?? ?? ?? ?'User-Agent':
? ?? ?? ?? ?'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/89.0.4389.82'
? ?? ???}
? ?? ???try:
? ?? ?? ?? ?r = self.http.head(self.param, headers=headers, allow_redirects=False)
? ?? ?? ?? ?self.url = r.headers['Location']
? ?? ???except:
? ?? ?? ?? ?self.url = self.param
? ? def __url2id(self):
? ?? ???try:
? ?? ?? ?? ?self.id = urlparse(self.url).path.split('/')[3]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def __url2uid(self):
? ?? ???try:
<p>

? ?? ?? ?? ?query = urlparse(self.url).query
? ?? ?? ?? ?self.id = parse_qs(query)['sec_uid'][0]
? ?? ???except:
? ?? ?? ?? ?self.id = ''
? ? def get_sign(self):
? ?? ???"""
? ?? ???網(wǎng)頁(yè)sign算法,現在不需要了,直接固定
? ?? ???"""
? ?? ???self.sign = 'TG2uvBAbGAHzG19a.rniF0xtrq'
? ?? ???return self.sign
? ? def get_user_info(self):
? ?? ???"""
? ?? ???取用戶(hù)信息
? ?? ???查詢(xún)結果在 self.user_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2uid()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('user_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.user_info = info
? ?? ???# 下載路徑
? ?? ???username = '{}_{}_{}'.format(self.user_info.get('short_id', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.user_info.get('nickname', '無(wú)昵稱(chēng)'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_challenge_info(self):
? ?? ???"""
? ?? ???取話(huà)題挑戰信息
? ?? ???查詢(xún)結果在 self.challenge_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/info/?ch_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('ch_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.challenge_info = info
? ?? ???# 話(huà)題挑戰下載路徑
? ?? ???username = '{}_{}_{}'.format(self.challenge_info.get('cid', '0'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.challenge_info.get('cha_name', '無(wú)標題'), self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def get_music_info(self):
? ?? ???"""
? ?? ???取音樂(lè )原聲信息
? ?? ???查詢(xún)結果在 self.music_info
? ?? ???"""
? ?? ???if self.url:
? ?? ?? ?? ?self.__url2id()
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/info/?music_id=' + self.id
? ?? ???try:
? ?? ?? ?? ?res = self.http.get(url).json()
? ?? ?? ?? ?info = res.get('music_info', dict())
? ?? ???except:
? ?? ?? ?? ?info = dict()
? ?? ???self.music_info = info
? ?? ???# 音樂(lè )原聲下載路徑
? ?? ???username = '{}_{}_{}'.format(self.music_info.get('mid', '0'), self.music_info.get('title', '無(wú)標題'),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? self.type)
? ?? ???self.download_path = Download.title2path(username)??# 需提前處理非法字符串
? ? def crawling_users_post(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品
? ?? ???"""
? ?? ???self.type = 'post'
? ?? ???self.__crawling_user()
? ? def crawling_users_like(self):
? ?? ???"""
? ?? ???采集用戶(hù)喜歡
? ?? ???"""
? ?? ???self.type = 'like'
? ?? ???self.__crawling_user()
? ? def crawling_challenge(self):
? ?? ???"""
? ?? ???采集話(huà)題挑戰
? ?? ???"""
? ?? ???self.type = 'challenge'
? ?? ???self.get_challenge_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... QFzfg
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/challenge/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "ch_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('話(huà)題挑戰采集出錯')

? ?? ???print('話(huà)題挑戰采集完成')
? ? def crawling_music(self):
? ?? ???"""
? ?? ???采集音樂(lè )原聲
? ?? ???"""
? ?? ???self.type = 'music'
? ?? ???self.get_music_info()??# 取當前信息,用做下載目錄
? ?? ???# https://www.iesdouyin.com/web/ ... OVC5j
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/music/list/aweme/'
? ?? ???cursor = '0'
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "music_id": self.id,
? ?? ?? ?? ?? ? "count": "21",??# 可調大 初始值:9
? ?? ?? ?? ?? ? "cursor": cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "screen_limit": "3",
? ?? ?? ?? ?? ? "download_click_limit": "0",
? ?? ?? ?? ?? ? "_signature": self.sign
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? cursor = res['cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('音樂(lè )原聲采集出錯')
? ?? ???print('音樂(lè )原聲采集完成')
? ? def __crawling_user(self):
? ?? ???"""
? ?? ???采集用戶(hù)作品/喜歡
? ?? ???"""
? ?? ???self.get_user_info()??# 取當前用戶(hù)信息,昵稱(chēng)用做下載目錄
? ?? ???max_cursor = 0
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???# https://www.iesdouyin.com/web/ ... tk%3D
? ?? ???url = 'https://www.iesdouyin.com/web/api/v2/aweme/{}/'.format(self.type)
? ?? ???while self.has_more:
? ?? ?? ?? ?params = {
? ?? ?? ?? ?? ? "sec_uid": self.id,
? ?? ?? ?? ?? ? "count": "21",
? ?? ?? ?? ?? ? "max_cursor": max_cursor,
? ?? ?? ?? ?? ? "aid": "1128",
? ?? ?? ?? ?? ? "_signature": self.sign,
? ?? ?? ?? ?? ? "dytk": ""
? ?? ?? ?? ?}
? ?? ?? ?? ?try:
? ?? ?? ?? ?? ? res = self.http.get(url, params=params).json()
? ?? ?? ?? ?? ? max_cursor = res['max_cursor']
? ?? ?? ?? ?? ? self.has_more = res['has_more']
? ?? ?? ?? ?? ? self.__append_videos(res)
? ?? ?? ?? ?except:
? ?? ?? ?? ?? ? print('作品采集出錯')
? ?? ???print('作品采集完成')
? ? def __append_videos(self, res):
? ?? ???"""
? ?? ???數據入庫
? ?? ???"""
? ?? ???if res.get('aweme_list'):
? ?? ?? ?? ?for item in res['aweme_list']:
? ?? ?? ?? ?? ? info = item['statistics']
? ?? ?? ?? ?? ? info.pop('forward_count')
? ?? ?? ?? ?? ? info.pop('play_count')
? ?? ?? ?? ?? ? info['desc'] = Download.title2path(item['desc'])??# 需提前處理非法字符串
? ?? ?? ?? ?? ? info['uri'] = item['video']['play_addr']['uri']
? ?? ?? ?? ?? ? info['play_addr'] = item['video']['play_addr']['url_list'][0]
? ?? ?? ?? ?? ? info['dynamic_cover'] = item['video']['dynamic_cover']['url_list'][0]
? ?? ?? ?? ?? ? info['status'] = 0??# 下載進(jìn)度狀態(tài);等待下載:0,下載中:0.xx;下載完成:1
? ?? ?? ?? ?? ? # 列表格式
? ?? ?? ?? ?? ? self.videosL.append(info)
? ?? ?? ?? ?? ? # 字典格式
? ?? ?? ?? ?? ? # self.videos[info['aweme_id']] = info
? ?? ?? ?? ?? ? # 此處可以直接添加下載任務(wù),不過(guò)考慮到下載占用網(wǎng)速,影響采集過(guò)程,所以采集完再下載
? ?? ?? ?? ?if self.limit:
? ?? ?? ?? ?? ? more = len(self.videos) - self.limit
? ?? ?? ?? ?? ? if more >= 0:
? ?? ?? ?? ?? ?? ???# 如果給出了限制采集數目,超出的刪除后直接返回
? ?? ?? ?? ?? ?? ???self.has_more = False
? ?? ?? ?? ?? ?? ???# 列表格式
? ?? ?? ?? ?? ?? ???self.videosL = self.videosL[:self.limit]
? ?? ?? ?? ?? ?? ???# 字典格式
? ?? ?? ?? ?? ?? ???# for i in range(more):
? ?? ?? ?? ?? ?? ???#? ???self.videos.popitem()
? ?? ?? ?? ?? ?? ???# return
? ?? ???else:??# 還有作品的情況下沒(méi)返回數據則進(jìn)入這里
? ?? ?? ?? ?print('未采集完成,但返回作品列表為空')
? ? def download_all(self):
? ?? ???"""
? ?? ???作品抓取完成后,統一添加下載任務(wù)
? ?? ???可選擇在外部注冊回調函數,監聽(tīng)下載任務(wù)狀態(tài)
? ?? ???"""
? ?? ???for id, video in enumerate(self.videosL):
? ?? ?? ?? ?# for id, video in self.videos.items():
? ?? ?? ?? ?gid = self.aria2.download(url=video['play_addr'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???filename='{}/{}_{}.mp4'.format(self.download_path, video['aweme_id'],
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?video['desc'])
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???# ,options={'gid': id}??# 指定gid
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???)
? ?? ?? ?? ?self.gids[gid] = id??# 因為傳入gid必須16位,所以就不指定gid了,另存一個(gè)字典映射
? ?? ???print('下載任務(wù)投遞完成')</p>
技巧:拼多多大神是怎么復制抖音爆款上傳到自己店鋪的?這個(gè)工具無(wú)需授權
隨著(zhù)抖音小店的火爆,不少拼多多商家開(kāi)始在抖音上尋找爆款商品,急需一款抖音寶到拼多多小店收款的工具。
今天要跟大家分享的是一款支持斗尚拼的工具。不僅可以采集復制寶物上架,還可以采集寶物進(jìn)行分析優(yōu)化。下面我主要介紹大家用的比較多的3個(gè)工具:
?、賹氊悘椭疲阂绘I復制抖音小店寶貝上傳至拼多多,支持批量采集
,可快速完成發(fā)貨!
工具支持多次開(kāi)啟,無(wú)需授權,不綁定電腦。店鋪團版支持5-200家店鋪!
?、趫D片處理器:抖音店鋪寶貝圖片一鍵采集
工具限時(shí)免費,快來(lái)試用吧~
本工具可以一鍵采集下載淘喜、拼多多、京東、豆店寶的主圖、sku圖、詳情頁(yè)、750詳情圖、主圖視頻、搜索列表展示圖等,還可以自動(dòng)拼接詳情圖片。
寶貝優(yōu)化過(guò)程中,賣(mài)家可以采集競品寶貝圖片進(jìn)行分析,并一鍵導出數據,方便美工學(xué)習和模仿。
?、蹖氊愒斍椋ㄔu論/sku/買(mǎi)家秀/問(wèn)大家)分析器:一鍵采集
抖音店鋪寶貝評論/sku/買(mǎi)家秀/問(wèn)大家
工具限時(shí)免費,快來(lái)試用吧~
一鍵采集
淘喜、拼多多、京東、豆店等各大平臺評論、sku占比分析、下載買(mǎi)家秀等,并支持一鍵拆分評論根、根占比分析、挖掘產(chǎn)品賣(mài)點(diǎn)。重點(diǎn)采集
問(wèn)大家,分析買(mǎi)家痛點(diǎn)。
工具免費分享,有需要的賣(mài)家可以免費試用!
下面,小編就為大家詳細講解一下拼多多寶貝復制工具的使用方法:
1.采集
寶貝
數據來(lái)源包括淘寶/天貓、1688、抖音小店、拼多多批發(fā)等平臺。也就是說(shuō),賣(mài)家可以在淘寶、1688、抖音小店、批發(fā)商上采集
寶貝并上傳到自己的店鋪。
工具限時(shí)免費,快來(lái)試用吧~
淘寶平臺采集寶貝數據,需要登錄普通買(mǎi)家賬號。如果采集
太多,可以在多個(gè)帳戶(hù)之間切換。1688和淘寶賬號一樣。
無(wú)需登錄即可采集
拼多多批發(fā)寶貝數據。如果您采集
了拼多多寶貝的數據,可以通過(guò)手機號和token登錄。
多多寶的采集
方式可以通過(guò)關(guān)鍵詞和分類(lèi)采集
,也可以全店采集
、其他平臺采集
、復制或批量導入。
2.上傳配置
寶貝收好后,進(jìn)入配置頁(yè)面:

工具限時(shí)免費,快來(lái)試用吧~
還沒(méi)有收到工具的賣(mài)家可以免費試用,還有限時(shí)會(huì )員權限!
一、價(jià)格
拼多多上的商品價(jià)格包括單價(jià)、單價(jià)、折扣價(jià)、最低SKU價(jià)等,采集
淘寶寶貝一般默認為折扣價(jià),折扣價(jià)顯示如下圖:
如果優(yōu)惠價(jià)格是臨時(shí)活動(dòng),沒(méi)有優(yōu)惠后,源鏈接價(jià)格會(huì )上漲。
拼多多默認單價(jià),可以通過(guò)加百分比、加減固定金額、指定價(jià)格等方式設置。
工具限時(shí)免費,快來(lái)試用吧~
2. 圖片
主圖可以默認不處理,也可以選擇以下幾張作為主圖。采集到的淘寶寶貝只有5張主圖,工具可以自動(dòng)補全10張主圖。
細節圖也可以不處理,也可以去掉指定位置的地圖,保留編號,也可以插入自定義細節圖,自定義細節加水印。
對于采集到的淘寶寶貝,高度超過(guò)1500的詳細圖片可以自動(dòng)壓縮分割,壓縮可以減少圖片空間的占用。
注意:處理圖片時(shí),一定要勾選【使用圖片空間上傳圖片】!如果你復制視頻,你需要有上傳視頻的權限!
3.標題
標題設置包括標題清詞(啟用本地自定義過(guò)濾)、標題過(guò)濾詞、標題替換(寶貝ID=新標題)等。標題可以通過(guò)添加前綴/后綴或直接替換來(lái)處理。
可以設置新標題只保留采集
寶貝標題前的字符數。特殊分類(lèi)支持長(cháng)標題校驗【上傳寶貝標題支持10個(gè)字符】。
標題重組可以分裂根,隨機打亂和重組。
4.類(lèi)別
因為商品類(lèi)目是跨平臺的,只是部分商品的類(lèi)目分類(lèi)會(huì )有所不同。需要手動(dòng)指定四級類(lèi)別(每個(gè)類(lèi)別級別都必須選擇),但大多數情況下默認匹配上一個(gè)類(lèi)別。
5.單品
SKU規格配置,不同平臺有不同的SKU屬性,可以過(guò)濾/替換符號和違禁詞,自動(dòng)分割SKU名稱(chēng)和備注,商家也可以自定義SKU。
注意:如果沒(méi)有sku,默認添加一個(gè)sku,最大數量限制為24個(gè)!
6.屬性

商品類(lèi)型可根據實(shí)際情況選擇,如普通商品、虛擬商品、進(jìn)口商品、積分卡或海外抄送個(gè)人郵寄等。
設置品牌(可以選擇不使用該品牌或更換其他品牌),設置產(chǎn)品編碼,是否支持假一賠十,7天無(wú)理由,壞了賠,是否秒-手/虛擬產(chǎn)品,您還可以自定義屬性。
7. 運輸
商家可以設置物流重量、物流類(lèi)型、發(fā)貨時(shí)間。
還沒(méi)有收到工具的賣(mài)家,點(diǎn)擊↓即可免費試用!
3.上傳
點(diǎn)擊保存設置后,會(huì )跳轉至上傳頁(yè)面,如下圖:
工具限時(shí)免費,快來(lái)試用吧~
賣(mài)家可以通過(guò)瀏覽器操作將寶貝信息上傳至列表,保存至草稿箱,或直接上架。如果上傳失敗,則不會(huì )保存到草稿箱。
此外,該頁(yè)面還可以清空上傳列表,刪除勾選的寶貝,去除上傳成功導出失敗的鏈接,選擇運費模板,一鍵勾選跳過(guò)重復上傳的寶貝。
繁瑣的操作也變得簡(jiǎn)單方便。通過(guò)工具裝貨,不僅可以解放雙手,還可以減少失誤,大大提高工作效率。
4.寶貝管理
對于店鋪寶貝,賣(mài)家可以在寶貝列表中選擇時(shí)間范圍內的店鋪、類(lèi)目、商品id數據,批量下架、修改價(jià)格和庫存等,一鍵刪除/清空寶貝。
工具限時(shí)免費,快來(lái)試用吧~
可設置清潔寶貝的創(chuàng )建時(shí)間、訪(fǎng)問(wèn)人數、采集
人數、銷(xiāo)量等,并可一鍵導出數據,查看修改失敗記錄。
注:右鍵列表可以查看上一個(gè)寶貝的鏈接。
五、服務(wù)保障
這款寶貝復制工具不僅功能穩定,而且還有完善的服務(wù)體系。多名技術(shù)人員24/7在線(xiàn),隨時(shí)處理用戶(hù)問(wèn)題。
無(wú)論是工具安裝問(wèn)題,還是日常操作問(wèn)題,賣(mài)家總能找到工作人員實(shí)時(shí)溝通。
同時(shí),工具技術(shù)團隊會(huì )定期采集
用戶(hù)需求,進(jìn)行有針對性的開(kāi)發(fā)和研發(fā),并保持工具功能版本不斷更新,滿(mǎn)足大家對商品的需求。
如果您需要工具,可以免費試用!
以上是寶貝復制工具的概況。功能穩定,服務(wù)保障完善。商戶(hù)可以輕松完成裝貨操作,大大提高工作效率。
解決方案:服務(wù)器監控——Cacti(全新版)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2022-11-22 09:19
MariaDB-client MariaDB-server
MariaDB-devel
PHP \//安裝 LAMP 架構 PHP-SNMP
php-ldap
php-pdo
php-mysql
php-devel
PHP-梨
PHP 通用
PHP-GD
php-mbstring
php-xml
php-process
Net-SNMP
net-snmp-utils
net-snmp-libs
net-snmp-agent-libs
net-snmp-devel
RRDTOOL
rrdtool-php
rrdtool-perl
RRDTOOL-devel
GCC OpenSSL-DEVEL
DOS2UNIX
自動(dòng)會(huì )議
自動(dòng)制作
Binutils libtool
CPP 后綴
glibc-headers
內核標頭
格利布-德維爾GD
GD-DEVEL
幫助2人
新冠酸酯
wget 補丁// 以上都是配置仙人掌所需的插件[root@aa ~]# vi /etc/httpd/conf/httpd.confServerName [root@aa ~]# vi /etc/httpd/
conf.d/php.confLoadModule php5_module modules/libphp5.so[root@aa ~]# vi /etc/php.inisafe_mode = off // Add date.timezone = PRC //Find modification [root@aa ~]# systemctl stop firewalld.service[root@aa ~]# setenforce 0[root@aa ~]# systemctl start httpd.service[root@aa ~]# systemctl start mariadb.service
成功啟動(dòng) [root@aa ~]#
mysql_secure_installation // 按照提示初步設置 Mariadb,設置密碼,刪除匿名用戶(hù),打開(kāi)根遠程登錄,刷新權限下方燈測試,先測試 PHP 健康狀態(tài) [root@aa ~]# vi /var/www/html/index.php // 加入測試頁(yè)面 Win10 訪(fǎng)問(wèn)
PHP 工作正常,以下測試數據庫連接 [root@aa ~]# mysql -uroot –p//登錄數據庫進(jìn)行測試帳戶(hù)仙人掌授權 MariaDB [(none)]> 創(chuàng )建數據庫 仙人掌字符集 utf8 整理utf8_bin;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'%' 由 'admin123' 標識;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'localhost' 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/index.php // 替換 Windows 10 訪(fǎng)問(wèn)的測試頁(yè)面
數據庫連接沒(méi)有問(wèn)題
---------可以開(kāi)始安裝 cacti--------------[root@aa ~]# tar xf cacti-1。26. .tar.gz[root@aa ~]# MV 仙人掌-1。1。26 /var/www/html/cacti[root@aa ~]# mysql -ucacti -p cacti < /var/www/html/cacti/cacti。sql輸入 password:// 密碼 admin123 將仙人掌的數據庫導入 [root@aa ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -urootmysql -pEnter password:// 密碼是abc123,1。1。cacti 版本 26 需要導入時(shí)間數據庫 [root@aa ~]# mysql -uroot –p//授予 cacti 用戶(hù)對時(shí)間數據庫 MariaDB [(none)] 的權限>授予 mysql 上的選擇。time_zone_name “cacti”@“l(fā)ocalhost” 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/cacti/include/config。
php$database_username = 'cacti'; $database_password = 'admin123';//要修改這兩個(gè)項目,數據庫不在本地計算機上,需要修改 $rdatabase 對應的條目并刪除注釋 [root@aa ~]# vi /etc/snmp/snmpd。 confcom2sec notConfigUser localhost public // 更改為環(huán)回地址 41access notConfigGroup “”anynoauth exact all none none// 將系統視圖更改為所有 62view 全部收錄
。180 // 刪除 # 符號 85[root@aa ~]# systemctl restart snmpd。service[root@aa ~]# systemctl enable snmpd。service[root@aa ~]# useradd -r -M cacti[root@aa ~]# chown -R cacti。cacti /var/www/html/cacti/rra/[root@aa ~]# chown -R cacti。
cacti /var/www/html/cacti/log/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/resource/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/cache[root@aa ~]# chown -R apache。Apache /var/www/html/cacti/scripts
-----------安裝仙人掌脊椎
為了優(yōu)化數據輪詢(xún)速度-----新版本的 Cacti 可以在沒(méi)有 PHP 腳本的情況下采集
數據,并且集成了一個(gè)新的插件 spine 用于采集
數據[root@aa ~]# rpm -ivh help2man-1.41.1-3.el7.noarch.rpm//install spine dependencies[root@aa ~]# ln -s /usr/ lib64/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so[root@aa ~]# tar xf cacti-spine-1.1.26.tar.gz[root@aa ~]# CD 仙人掌-脊柱-1.1.26[root@aa 仙人掌脊椎-1.1.26]# ./ 配置[root@aa 仙人掌脊-1.1.26]# 制作 &&制作 install[root@aa ~]# cp /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf[root@aa ~]# vi /usr/local/spine/ etc/spine.conf// 修改相關(guān)參數DB_HostlocalhostDB_DatabasecactiDB_UsercactiDB_Passadmin123DB_Port3306
RDB_HostlocalhostRDB_DatabasecactiRDB_UsercactiRDB_Passadmin123RDB_Port3306配置后,win10可以訪(fǎng)問(wèn)192.168.80.181/cacti/進(jìn)行安裝
發(fā)現沒(méi)有安裝mbstring和snmp,數據庫參數設置有問(wèn)題,我們來(lái)優(yōu)化一下
安裝兩個(gè)軟件包[root@aa ~]# rpm -ivh php-mbstring-5.4.16-42.el7.x86_64.rpm[root@aa ~]#
rpm -ivh php-snmp-5.4.16-42.el7.x86_64.rpm 轉到數據庫設置 [root@aa ~]# vi /etc/f.d/fcharacter_set_ 服務(wù)器 = utf8mb4collation_server = utf8mb4_unicode_cicharacter_set_client = utf8mb4max_connections = 100max_heap_table_size = 256Mmax_allowed_packet = 16777216join_buffer_size = 64Mtmp_table_size = 64Minnodb_file_per_table = ONinnodb_buffer_pool_size = 1024Minnodb_doublewrite = OFFinnodb_lock_wait_timeout = 50innodb_flush_log_at_timeout = 3innodb_read_io_線(xiàn)程 = 32innodb_write_io_threads = 16[root@aa ~]# 服務(wù) MariaDB 重啟[root@aa ~]# 服務(wù) httpd 重啟,然后訪(fǎng)問(wèn)網(wǎng)頁(yè)安裝
軟件包已安裝
數據庫配置沒(méi)有問(wèn)題,然后直接下一步
根據要求選擇安裝后,初始用戶(hù)名admin密碼admin,輸入后需要更改密碼,密碼有一定的復雜度,必須超過(guò)8位數字(必須收錄
大寫(xiě)小寫(xiě)字符)。
登錄成功----------------以下仙人掌監控設置------------------控制臺 -> 設置 -> 路徑 -> 在 Spine 配置文件路徑 /usr/local/spine/bin/spine 中填寫(xiě) spine 二進(jìn)制文件
位置文本框 在文件路徑文本框中填寫(xiě)配置文件路徑 /usr/local/spine/etc/spine.conf,然后單擊保存。
控制臺 ->設置 -> 輪詢(xún)器
-> 在輪詢(xún)器類(lèi)型下拉框中選擇脊柱,然后單擊保存。注意:如果使用 spine,則以下兩個(gè)輪換時(shí)間和計劃任務(wù)間隔應設置為每分鐘
添加設備和圖形后,需要重建采集
器緩存??刂婆_>系統實(shí)用程序>重建輪詢(xún)器緩存
點(diǎn)擊進(jìn)入以下屏幕,無(wú)需設置
仙人掌的基本配置之后,
你需要在服務(wù)器上添加一個(gè)定時(shí)任務(wù)來(lái)采集
數據(PHP 中定時(shí)任務(wù)的間隔是 5 分鐘,而我們使用 Spine 模式時(shí),定時(shí)任務(wù)的間隔是 1 分鐘)[root@aa cacti]# crontab –e*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php >> /tmp/ cacti_rrdtool.log我們去仙人掌檢查管理 ? 設備(設備)檢查 Linux 狀態(tài)為 UP, 注意不要著(zhù)急 脊椎方式剛開(kāi)始大約需要2-5分鐘,有快有慢
您可以在下面創(chuàng )建一個(gè)圖表來(lái)分析所選設備
選擇GO
然后直接選擇圖形查看仙人掌加工后的圖片
解決方案:降本增效利器?Share Creators智能數字資產(chǎn)管理系統真香!
降本增效似乎是一個(gè)持續而永恒的話(huà)題。尤其是今年,尤為重要~
疫情不知不覺(jué)已經(jīng)伴隨我們三年了。在各行各業(yè)都受到疫情沖擊較大的背景下,降本增效對于很多企業(yè)來(lái)說(shuō)不再是錦上添花,而可能是唯一的出路。
隨著(zhù)市場(chǎng)的縮小和競爭的加劇,在更加“體量”的行業(yè)環(huán)境下,如何通過(guò)提升自身效率來(lái)有效降低成本,是每個(gè)團隊都面臨的問(wèn)題。
什么是降低成本?如何提高效率?
要回答這個(gè)問(wèn)題,我先來(lái)看看各個(gè)團隊每天都在經(jīng)歷什么:
您是否經(jīng)常淹沒(méi)在充滿(mǎn)不同版本和各種文件的文件夾中?苦苦尋找,還是找不到最新的文件分享?當你終于找到自己需要的資源時(shí),往往需要通過(guò)不同的通訊軟件與內部同事和外部伙伴公開(kāi)分享。
簡(jiǎn)單計算一下,制作一個(gè)游戲角色需要2個(gè)月左右,目前國內平均制作價(jià)格為1000元/天,一個(gè)丟失的文件損失約4萬(wàn)元。你現在的公司能保證每個(gè)文件的流程文件和最終文件都能妥善備份,并且隨時(shí)可以找到嗎?
設計行業(yè)往往伴隨著(zhù)大量的數字資產(chǎn),文件種類(lèi)繁多,種類(lèi)繁多。一個(gè)CG 3D文件動(dòng)輒幾十甚至上百GB,每個(gè)文件都需要下載到本地才能查看。在多辦公室遠程辦公場(chǎng)景下,一個(gè)簡(jiǎn)單的文件重命名可能需要幾個(gè)小時(shí)才能下載到本地才能完成。
Dropbox、Google Drive、云盤(pán)等外部工具上傳下載需要大量的等待時(shí)間。對方上傳的文件在一段時(shí)間后下載鏈接失效,文件被刪除。這些都是很常見(jiàn)的問(wèn)題。更糟糕的是,如果文件沒(méi)有及時(shí)妥善備份,往往會(huì )給企業(yè)帶來(lái)巨大的經(jīng)濟損失,而實(shí)際案例更是數不勝數……
這些看似常規的數字資產(chǎn)的搜索、共享、傳輸和備份,往往浪費了太多的時(shí)間,消耗了太多的精力。
長(cháng)此以往,何談降本增效?
是時(shí)候做出一些改變了。
欲善其事,必先利其器
效率的提升離不開(kāi)先進(jìn)工具的幫助。
根據普華永道的一項調查,一款優(yōu)秀的數字資產(chǎn)管理軟件可以幫助被調查團隊在一年內節省一個(gè)月的制作時(shí)間,效率得到大幅提升。Share Creators智能數字資產(chǎn)管理系統就是這樣一款軟件。
Share Creators智能數字資產(chǎn)管理系統
無(wú)論是企業(yè)、團隊還是個(gè)人,無(wú)論團隊是遠程工作還是協(xié)同工作,我們都希望Share Creators強大、智能的數字資源管理系統能夠有效提高您和您團隊的工作效率。
先看一下demo:
申請免費試用:
簡(jiǎn)單理解,我們的產(chǎn)品就是“企業(yè)級谷歌”,可以高效的幫您備份、搜索、復用、版本控制之前所有的歷史資源和文檔:
1、AI智能搜索快速找到所需資源
Share Creators擁有業(yè)界領(lǐng)先的AI識別功能,可智能解析資源文件,讓您輕松找到所有文件。即使我們忘記給文件命名,也能被AI識別,隨時(shí)找到對應的資源。
同時(shí),強大的人工智能標簽結合自定義個(gè)人標簽庫+團隊標簽池功能,可大幅提升搜索精準度。
你覺(jué)得這就結束了嗎?Share Creators還提供了多種搜索方式,用戶(hù)可以通過(guò)顏色、名稱(chēng)、標簽、文件類(lèi)型、文件大小、橫豎排版、上傳時(shí)間等屬性進(jìn)行搜索。這些強大的搜索不僅限于圖像、PSD、視頻文件等內部文件,還包括 URL、Google Drive 等其他系統中的文件。
2.支持上百種資源格式在線(xiàn)高速預覽和即時(shí)反饋
Share Creators全面支持100多種資源格式,快速在線(xiàn)實(shí)時(shí)預覽。目前支持的格式包括:2D圖片、3D FBX/OBJ、2D-SPINE動(dòng)畫(huà)、視頻、音頻、PPT、word等。將支持Maya和3dmax在線(xiàn)觀(guān)看),輕松實(shí)現高速秒級在線(xiàn)預覽。
同時(shí),您還可以進(jìn)行查看回復、實(shí)時(shí)分享等多項操作。評論回復時(shí),只需停在3D模型或視頻的某一幀進(jìn)行標注反饋,非常方便。
3. 便捷易用的分享交流:外包商管理的利器
數字資產(chǎn)的共享是日常工作中使用頻率最高的功能之一。您可以直接從Share Creators界面選擇單個(gè)文件或共享整個(gè)文件夾內容,整個(gè)過(guò)程簡(jiǎn)單方便。
Share Creators新增訪(fǎng)客模式,充分滿(mǎn)足外部合作伙伴的接入需求,與外包商合作的進(jìn)度管理和審核變得更加得心應手。不再翻聊天記錄,回到原來(lái)的更新,卻發(fā)現文件已經(jīng)過(guò)期,無(wú)法下載。
同時(shí),當您對外共享數字資產(chǎn)時(shí),可以為共享內容設置只讀和可編輯兩種共享權限,在滿(mǎn)足不同需求的同時(shí),最大程度保護共享內容的安全。
在日常交流方面,Share Creators支持整合常用的交流工具。飛書(shū)、釘釘、企業(yè)微信、Slack等通訊工具都可以通過(guò)API方式集成到Share Creators中。這樣一來(lái),整個(gè)公司的組織人員就可以輕松導入。人員離職,只能在通訊工具中刪除,資產(chǎn)訪(fǎng)問(wèn)權限自動(dòng)關(guān)閉,無(wú)需管理雙方用戶(hù)列表。
4、從生產(chǎn)工具到游戲引擎,上下游全流程接入
Share Creators可以實(shí)現Photoshop、After Effect等上游制作工具的對接,Unity、Unreal等游戲引擎的對接,以及SVN、Perforce碼控等下游制作工具的對接(逐步上線(xiàn),部分軟件對接已有得到支持)。
Share Creators即將開(kāi)放更多API接口,實(shí)現設計和游戲行業(yè)常用軟件的深度融合,讓整個(gè)制作過(guò)程更加方便快捷。
5.一鍵輕松采集
資源
Share Creators強大的一鍵資源采集
功能,可以輕松幫助設計師解決資源采集
問(wèn)題。
點(diǎn)擊批量采集
,在網(wǎng)頁(yè)查看需要采集
的圖片,輕松完成一鍵采集
。選中的圖片會(huì )自動(dòng)保存在Share Creators個(gè)人文件夾中,供您日后使用。
Share Creators還有強大的頁(yè)面截圖和屏幕錄制功能。您可以選擇對頁(yè)面特定區域、頁(yè)面可見(jiàn)區域或整個(gè)頁(yè)面進(jìn)行一鍵截圖。
6、本地資源實(shí)時(shí)備份
Share Creators可以將本地資源實(shí)時(shí)同步到服務(wù)器,同時(shí)支持權限管理,最大程度降低資產(chǎn)不合理丟失的風(fēng)險;實(shí)時(shí)同步的文件也可以讓團隊成員輕松實(shí)現遠程或移動(dòng)辦公。
在Globee2022信息技術(shù)世界大獎的評選中,Share Creators智能數字資產(chǎn)管理系統成功斬獲三項大獎,其中,在年度數字資產(chǎn)管理軟件評選中,以極高的含金量成功摘得金獎。
目前,全球許多游戲開(kāi)發(fā)商和工作室都在使用Share Creators來(lái)提高他們的數字資產(chǎn)管理效率。無(wú)數事例表明,Share Creators智能數字資產(chǎn)管理系統已經(jīng)成為幫助他們降本增效的利器。
針對不同規模的團隊,Share Creators 提供了基于用戶(hù)數量的座位版本;針對大型企業(yè),Share Creators提供了不限制用戶(hù)數量的企業(yè)版。
這就是你苦苦尋找的提升工作效率的神器嗎?快來(lái)免費體驗Share Creators智能數字資產(chǎn)管理系統吧!
申請免費試用:
或者隨時(shí)聯(lián)系 查看全部
解決方案:服務(wù)器監控——Cacti(全新版)
MariaDB-client MariaDB-server
MariaDB-devel
PHP \//安裝 LAMP 架構 PHP-SNMP
php-ldap
php-pdo
php-mysql
php-devel
PHP-梨
PHP 通用
PHP-GD
php-mbstring
php-xml
php-process
Net-SNMP
net-snmp-utils
net-snmp-libs
net-snmp-agent-libs
net-snmp-devel
RRDTOOL
rrdtool-php
rrdtool-perl
RRDTOOL-devel
GCC OpenSSL-DEVEL
DOS2UNIX
自動(dòng)會(huì )議
自動(dòng)制作
Binutils libtool

CPP 后綴
glibc-headers
內核標頭
格利布-德維爾GD
GD-DEVEL
幫助2人
新冠酸酯
wget 補丁// 以上都是配置仙人掌所需的插件[root@aa ~]# vi /etc/httpd/conf/httpd.confServerName [root@aa ~]# vi /etc/httpd/
conf.d/php.confLoadModule php5_module modules/libphp5.so[root@aa ~]# vi /etc/php.inisafe_mode = off // Add date.timezone = PRC //Find modification [root@aa ~]# systemctl stop firewalld.service[root@aa ~]# setenforce 0[root@aa ~]# systemctl start httpd.service[root@aa ~]# systemctl start mariadb.service
成功啟動(dòng) [root@aa ~]#
mysql_secure_installation // 按照提示初步設置 Mariadb,設置密碼,刪除匿名用戶(hù),打開(kāi)根遠程登錄,刷新權限下方燈測試,先測試 PHP 健康狀態(tài) [root@aa ~]# vi /var/www/html/index.php // 加入測試頁(yè)面 Win10 訪(fǎng)問(wèn)
PHP 工作正常,以下測試數據庫連接 [root@aa ~]# mysql -uroot –p//登錄數據庫進(jìn)行測試帳戶(hù)仙人掌授權 MariaDB [(none)]> 創(chuàng )建數據庫 仙人掌字符集 utf8 整理utf8_bin;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'%' 由 'admin123' 標識;MariaDB [(none)]> 授予所有 ON cacti.* 到 'cacti'@'localhost' 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/index.php // 替換 Windows 10 訪(fǎng)問(wèn)的測試頁(yè)面
數據庫連接沒(méi)有問(wèn)題
---------可以開(kāi)始安裝 cacti--------------[root@aa ~]# tar xf cacti-1。26. .tar.gz[root@aa ~]# MV 仙人掌-1。1。26 /var/www/html/cacti[root@aa ~]# mysql -ucacti -p cacti < /var/www/html/cacti/cacti。sql輸入 password:// 密碼 admin123 將仙人掌的數據庫導入 [root@aa ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -urootmysql -pEnter password:// 密碼是abc123,1。1。cacti 版本 26 需要導入時(shí)間數據庫 [root@aa ~]# mysql -uroot –p//授予 cacti 用戶(hù)對時(shí)間數據庫 MariaDB [(none)] 的權限>授予 mysql 上的選擇。time_zone_name “cacti”@“l(fā)ocalhost” 由 'admin123' 標識;MariaDB [(無(wú))]>刷新權限;[root@aa ~]# vi /var/www/html/cacti/include/config。
php$database_username = 'cacti'; $database_password = 'admin123';//要修改這兩個(gè)項目,數據庫不在本地計算機上,需要修改 $rdatabase 對應的條目并刪除注釋 [root@aa ~]# vi /etc/snmp/snmpd。 confcom2sec notConfigUser localhost public // 更改為環(huán)回地址 41access notConfigGroup “”anynoauth exact all none none// 將系統視圖更改為所有 62view 全部收錄
。180 // 刪除 # 符號 85[root@aa ~]# systemctl restart snmpd。service[root@aa ~]# systemctl enable snmpd。service[root@aa ~]# useradd -r -M cacti[root@aa ~]# chown -R cacti。cacti /var/www/html/cacti/rra/[root@aa ~]# chown -R cacti。
cacti /var/www/html/cacti/log/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/resource/[root@aa ~]# chown -R apache。apache /var/www/html/cacti/cache[root@aa ~]# chown -R apache。Apache /var/www/html/cacti/scripts
-----------安裝仙人掌脊椎
為了優(yōu)化數據輪詢(xún)速度-----新版本的 Cacti 可以在沒(méi)有 PHP 腳本的情況下采集
數據,并且集成了一個(gè)新的插件 spine 用于采集
數據[root@aa ~]# rpm -ivh help2man-1.41.1-3.el7.noarch.rpm//install spine dependencies[root@aa ~]# ln -s /usr/ lib64/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so[root@aa ~]# tar xf cacti-spine-1.1.26.tar.gz[root@aa ~]# CD 仙人掌-脊柱-1.1.26[root@aa 仙人掌脊椎-1.1.26]# ./ 配置[root@aa 仙人掌脊-1.1.26]# 制作 &&制作 install[root@aa ~]# cp /usr/local/spine/etc/spine.conf.dist /usr/local/spine/etc/spine.conf[root@aa ~]# vi /usr/local/spine/ etc/spine.conf// 修改相關(guān)參數DB_HostlocalhostDB_DatabasecactiDB_UsercactiDB_Passadmin123DB_Port3306
RDB_HostlocalhostRDB_DatabasecactiRDB_UsercactiRDB_Passadmin123RDB_Port3306配置后,win10可以訪(fǎng)問(wèn)192.168.80.181/cacti/進(jìn)行安裝
發(fā)現沒(méi)有安裝mbstring和snmp,數據庫參數設置有問(wèn)題,我們來(lái)優(yōu)化一下

安裝兩個(gè)軟件包[root@aa ~]# rpm -ivh php-mbstring-5.4.16-42.el7.x86_64.rpm[root@aa ~]#
rpm -ivh php-snmp-5.4.16-42.el7.x86_64.rpm 轉到數據庫設置 [root@aa ~]# vi /etc/f.d/fcharacter_set_ 服務(wù)器 = utf8mb4collation_server = utf8mb4_unicode_cicharacter_set_client = utf8mb4max_connections = 100max_heap_table_size = 256Mmax_allowed_packet = 16777216join_buffer_size = 64Mtmp_table_size = 64Minnodb_file_per_table = ONinnodb_buffer_pool_size = 1024Minnodb_doublewrite = OFFinnodb_lock_wait_timeout = 50innodb_flush_log_at_timeout = 3innodb_read_io_線(xiàn)程 = 32innodb_write_io_threads = 16[root@aa ~]# 服務(wù) MariaDB 重啟[root@aa ~]# 服務(wù) httpd 重啟,然后訪(fǎng)問(wèn)網(wǎng)頁(yè)安裝
軟件包已安裝
數據庫配置沒(méi)有問(wèn)題,然后直接下一步
根據要求選擇安裝后,初始用戶(hù)名admin密碼admin,輸入后需要更改密碼,密碼有一定的復雜度,必須超過(guò)8位數字(必須收錄
大寫(xiě)小寫(xiě)字符)。
登錄成功----------------以下仙人掌監控設置------------------控制臺 -> 設置 -> 路徑 -> 在 Spine 配置文件路徑 /usr/local/spine/bin/spine 中填寫(xiě) spine 二進(jìn)制文件
位置文本框 在文件路徑文本框中填寫(xiě)配置文件路徑 /usr/local/spine/etc/spine.conf,然后單擊保存。
控制臺 ->設置 -> 輪詢(xún)器
-> 在輪詢(xún)器類(lèi)型下拉框中選擇脊柱,然后單擊保存。注意:如果使用 spine,則以下兩個(gè)輪換時(shí)間和計劃任務(wù)間隔應設置為每分鐘
添加設備和圖形后,需要重建采集
器緩存??刂婆_>系統實(shí)用程序>重建輪詢(xún)器緩存
點(diǎn)擊進(jìn)入以下屏幕,無(wú)需設置
仙人掌的基本配置之后,
你需要在服務(wù)器上添加一個(gè)定時(shí)任務(wù)來(lái)采集
數據(PHP 中定時(shí)任務(wù)的間隔是 5 分鐘,而我們使用 Spine 模式時(shí),定時(shí)任務(wù)的間隔是 1 分鐘)[root@aa cacti]# crontab –e*/1 * * * * /usr/bin/php /var/www/html/cacti/poller.php >> /tmp/ cacti_rrdtool.log我們去仙人掌檢查管理 ? 設備(設備)檢查 Linux 狀態(tài)為 UP, 注意不要著(zhù)急 脊椎方式剛開(kāi)始大約需要2-5分鐘,有快有慢
您可以在下面創(chuàng )建一個(gè)圖表來(lái)分析所選設備
選擇GO
然后直接選擇圖形查看仙人掌加工后的圖片
解決方案:降本增效利器?Share Creators智能數字資產(chǎn)管理系統真香!
降本增效似乎是一個(gè)持續而永恒的話(huà)題。尤其是今年,尤為重要~
疫情不知不覺(jué)已經(jīng)伴隨我們三年了。在各行各業(yè)都受到疫情沖擊較大的背景下,降本增效對于很多企業(yè)來(lái)說(shuō)不再是錦上添花,而可能是唯一的出路。
隨著(zhù)市場(chǎng)的縮小和競爭的加劇,在更加“體量”的行業(yè)環(huán)境下,如何通過(guò)提升自身效率來(lái)有效降低成本,是每個(gè)團隊都面臨的問(wèn)題。
什么是降低成本?如何提高效率?
要回答這個(gè)問(wèn)題,我先來(lái)看看各個(gè)團隊每天都在經(jīng)歷什么:
您是否經(jīng)常淹沒(méi)在充滿(mǎn)不同版本和各種文件的文件夾中?苦苦尋找,還是找不到最新的文件分享?當你終于找到自己需要的資源時(shí),往往需要通過(guò)不同的通訊軟件與內部同事和外部伙伴公開(kāi)分享。
簡(jiǎn)單計算一下,制作一個(gè)游戲角色需要2個(gè)月左右,目前國內平均制作價(jià)格為1000元/天,一個(gè)丟失的文件損失約4萬(wàn)元。你現在的公司能保證每個(gè)文件的流程文件和最終文件都能妥善備份,并且隨時(shí)可以找到嗎?
設計行業(yè)往往伴隨著(zhù)大量的數字資產(chǎn),文件種類(lèi)繁多,種類(lèi)繁多。一個(gè)CG 3D文件動(dòng)輒幾十甚至上百GB,每個(gè)文件都需要下載到本地才能查看。在多辦公室遠程辦公場(chǎng)景下,一個(gè)簡(jiǎn)單的文件重命名可能需要幾個(gè)小時(shí)才能下載到本地才能完成。
Dropbox、Google Drive、云盤(pán)等外部工具上傳下載需要大量的等待時(shí)間。對方上傳的文件在一段時(shí)間后下載鏈接失效,文件被刪除。這些都是很常見(jiàn)的問(wèn)題。更糟糕的是,如果文件沒(méi)有及時(shí)妥善備份,往往會(huì )給企業(yè)帶來(lái)巨大的經(jīng)濟損失,而實(shí)際案例更是數不勝數……
這些看似常規的數字資產(chǎn)的搜索、共享、傳輸和備份,往往浪費了太多的時(shí)間,消耗了太多的精力。
長(cháng)此以往,何談降本增效?
是時(shí)候做出一些改變了。
欲善其事,必先利其器
效率的提升離不開(kāi)先進(jìn)工具的幫助。
根據普華永道的一項調查,一款優(yōu)秀的數字資產(chǎn)管理軟件可以幫助被調查團隊在一年內節省一個(gè)月的制作時(shí)間,效率得到大幅提升。Share Creators智能數字資產(chǎn)管理系統就是這樣一款軟件。
Share Creators智能數字資產(chǎn)管理系統
無(wú)論是企業(yè)、團隊還是個(gè)人,無(wú)論團隊是遠程工作還是協(xié)同工作,我們都希望Share Creators強大、智能的數字資源管理系統能夠有效提高您和您團隊的工作效率。

先看一下demo:
申請免費試用:
簡(jiǎn)單理解,我們的產(chǎn)品就是“企業(yè)級谷歌”,可以高效的幫您備份、搜索、復用、版本控制之前所有的歷史資源和文檔:
1、AI智能搜索快速找到所需資源
Share Creators擁有業(yè)界領(lǐng)先的AI識別功能,可智能解析資源文件,讓您輕松找到所有文件。即使我們忘記給文件命名,也能被AI識別,隨時(shí)找到對應的資源。
同時(shí),強大的人工智能標簽結合自定義個(gè)人標簽庫+團隊標簽池功能,可大幅提升搜索精準度。
你覺(jué)得這就結束了嗎?Share Creators還提供了多種搜索方式,用戶(hù)可以通過(guò)顏色、名稱(chēng)、標簽、文件類(lèi)型、文件大小、橫豎排版、上傳時(shí)間等屬性進(jìn)行搜索。這些強大的搜索不僅限于圖像、PSD、視頻文件等內部文件,還包括 URL、Google Drive 等其他系統中的文件。
2.支持上百種資源格式在線(xiàn)高速預覽和即時(shí)反饋
Share Creators全面支持100多種資源格式,快速在線(xiàn)實(shí)時(shí)預覽。目前支持的格式包括:2D圖片、3D FBX/OBJ、2D-SPINE動(dòng)畫(huà)、視頻、音頻、PPT、word等。將支持Maya和3dmax在線(xiàn)觀(guān)看),輕松實(shí)現高速秒級在線(xiàn)預覽。
同時(shí),您還可以進(jìn)行查看回復、實(shí)時(shí)分享等多項操作。評論回復時(shí),只需停在3D模型或視頻的某一幀進(jìn)行標注反饋,非常方便。
3. 便捷易用的分享交流:外包商管理的利器
數字資產(chǎn)的共享是日常工作中使用頻率最高的功能之一。您可以直接從Share Creators界面選擇單個(gè)文件或共享整個(gè)文件夾內容,整個(gè)過(guò)程簡(jiǎn)單方便。
Share Creators新增訪(fǎng)客模式,充分滿(mǎn)足外部合作伙伴的接入需求,與外包商合作的進(jìn)度管理和審核變得更加得心應手。不再翻聊天記錄,回到原來(lái)的更新,卻發(fā)現文件已經(jīng)過(guò)期,無(wú)法下載。
同時(shí),當您對外共享數字資產(chǎn)時(shí),可以為共享內容設置只讀和可編輯兩種共享權限,在滿(mǎn)足不同需求的同時(shí),最大程度保護共享內容的安全。
在日常交流方面,Share Creators支持整合常用的交流工具。飛書(shū)、釘釘、企業(yè)微信、Slack等通訊工具都可以通過(guò)API方式集成到Share Creators中。這樣一來(lái),整個(gè)公司的組織人員就可以輕松導入。人員離職,只能在通訊工具中刪除,資產(chǎn)訪(fǎng)問(wèn)權限自動(dòng)關(guān)閉,無(wú)需管理雙方用戶(hù)列表。

4、從生產(chǎn)工具到游戲引擎,上下游全流程接入
Share Creators可以實(shí)現Photoshop、After Effect等上游制作工具的對接,Unity、Unreal等游戲引擎的對接,以及SVN、Perforce碼控等下游制作工具的對接(逐步上線(xiàn),部分軟件對接已有得到支持)。
Share Creators即將開(kāi)放更多API接口,實(shí)現設計和游戲行業(yè)常用軟件的深度融合,讓整個(gè)制作過(guò)程更加方便快捷。
5.一鍵輕松采集
資源
Share Creators強大的一鍵資源采集
功能,可以輕松幫助設計師解決資源采集
問(wèn)題。
點(diǎn)擊批量采集
,在網(wǎng)頁(yè)查看需要采集
的圖片,輕松完成一鍵采集
。選中的圖片會(huì )自動(dòng)保存在Share Creators個(gè)人文件夾中,供您日后使用。
Share Creators還有強大的頁(yè)面截圖和屏幕錄制功能。您可以選擇對頁(yè)面特定區域、頁(yè)面可見(jiàn)區域或整個(gè)頁(yè)面進(jìn)行一鍵截圖。
6、本地資源實(shí)時(shí)備份
Share Creators可以將本地資源實(shí)時(shí)同步到服務(wù)器,同時(shí)支持權限管理,最大程度降低資產(chǎn)不合理丟失的風(fēng)險;實(shí)時(shí)同步的文件也可以讓團隊成員輕松實(shí)現遠程或移動(dòng)辦公。
在Globee2022信息技術(shù)世界大獎的評選中,Share Creators智能數字資產(chǎn)管理系統成功斬獲三項大獎,其中,在年度數字資產(chǎn)管理軟件評選中,以極高的含金量成功摘得金獎。
目前,全球許多游戲開(kāi)發(fā)商和工作室都在使用Share Creators來(lái)提高他們的數字資產(chǎn)管理效率。無(wú)數事例表明,Share Creators智能數字資產(chǎn)管理系統已經(jīng)成為幫助他們降本增效的利器。
針對不同規模的團隊,Share Creators 提供了基于用戶(hù)數量的座位版本;針對大型企業(yè),Share Creators提供了不限制用戶(hù)數量的企業(yè)版。
這就是你苦苦尋找的提升工作效率的神器嗎?快來(lái)免費體驗Share Creators智能數字資產(chǎn)管理系統吧!
申請免費試用:
或者隨時(shí)聯(lián)系
解決方案:如何使用 SkyWalking 給 Dubbo 服務(wù)做鏈路追蹤?
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 81 次瀏覽 ? 2022-11-22 09:18
Skywalking監控截圖:
Apache Skywalking(孵化器)簡(jiǎn)介
Apache Skywalking (Incubator) 專(zhuān)為微服務(wù)架構和云原生架構系統設計,支持分布式鏈路跟蹤APM系統。Apache Skywalking(孵化器)通過(guò)加載探針采集
應用調用鏈接信息,對采集
到的調用鏈接信息進(jìn)行分析,生成應用間關(guān)系、服務(wù)間關(guān)系和服務(wù)指標。Apache Skywalking (Incubating) 目前支持多種語(yǔ)言,包括 Java、.Net Core、Node.js 和 Go 語(yǔ)言。
目前Skywalking已經(jīng)支持從6個(gè)可視化維度分析分布式系統的運行情況。
Dubbo與Apache Skywalking(孵化器)編寫(xiě)Dubbo示例程序
Dubbo示例程序已經(jīng)上傳到Github倉庫。方便大家下載使用。
API工程
服務(wù)接口:
package?org.apache.skywalking.demo.interfaces;<br /><br />public?interface?HelloService?{<br />????String?sayHello(String?name);<br />}<br />
Dubbo服務(wù)提供項目
package?org.apache.skywalking.demo.provider;<br /><br />@Service(version?=?"${demo.service.version}",<br />????application?=?"${dubbo.application.id}",<br />????protocol?=?"${dubbo.protocol.id}",<br />????registry?=?"${dubbo.registry.id}",?timeout?=?60000)<br />public?class?HelloServiceImpl?implements?HelloService?{<br /><br />????public?String?sayHello(String?name)?{<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));<br />????????return?"Hello,?"?+?name;<br />????}<br /><br />}<br />
消費者工程
package?org.apache.skywalking.demo.consumer;<br /><br />@RestController<br />public?class?ConsumerController?{<br /><br />????private?static?int?COUNT?=?0;<br /><br />????@Reference(version?=?"${demo.service.version}",<br />????????application?=?"${dubbo.application.id}",<br />????????url?=?"dubbo://localhost:20880",?timeout?=?60000)<br />????private?HelloService?helloService;<br /><br />????@GetMapping("/sayHello/{name}")<br />????public?String?sayHello(@PathVariable(name?=?"name")?String?name)?{<br />????????if?((COUNT++)?%?3?==?0){<br />????????????throw?new?RuntimeException();<br />????????}<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));<br />????????return?helloService.sayHello(name);<br />????}<br />}<br />
部署 Apache Skywalking(孵化器)
Apache Skywalking(孵化器)提供兩種部署模式:?jiǎn)喂濣c(diǎn)模式和集群模式。以下是單節點(diǎn)模式部署步驟。有關(guān)集群模式部署的詳細信息,請參閱文檔。
依賴(lài)第三方組件
JDK8+
彈性搜索 5.x
部署步驟
下載 Apache Skywalking 采集
器
部署彈性搜索
解壓縮并啟動(dòng) Skywalking Collector。運行 bin/startup.sh 命令啟動(dòng) Skywalking Collector
啟動(dòng)示例程序
在啟動(dòng)示例程序之前,先執行編譯打包命令:
./mvnw?clean?package<br />
啟動(dòng)服務(wù)提供者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-provider?-Dskywalking.collector.servers=localhost:10800?dubbo-provider/target/dubbo-provider.jar<br />
啟動(dòng)服務(wù)消費者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-consumer?-Dskywalking.collector.servers=localhost:10800?dubbo-consumer/target/dubbo-consumer.jar?<br />
獲得消費者提供的服務(wù)
curl?http://localhost:8080/sayHello/test<br />
Skywalking監控截圖:首頁(yè)
/admin-guide/images/skywalking-dashboard.png 拓撲圖
/admin-guide/images/skywalking-topology.png 應用視圖
/admin-guide/images/skywalking-application.png
JVM信息
/admin-guide/images/skywalking-application_instance.png 服務(wù)視圖
服務(wù)消費者:
/admin-guide/images/skywalking-service-consumer.png
服務(wù)提供者:
/admin-guide/images/skywalking-service-provider.png 跟蹤視圖
/admin-guide/images/skywalking-trace.png
跨度信息:
/admin-guide/images/skywalking-span-Info.png 報警視圖
/admin-guide/images/skywalking-alarm.png
歡迎加入我的知識星球,一起探討架構,交流源碼。要加入,請按住下面的二維碼:
知識星球上已更新源碼,分析如下:
目前,《Dubbo源碼解析》目錄已在知識星球更新如下:
01.調試環(huán)境搭建
02.項目結構一覽
03.配置配置
04.核心流程清單
05.擴展機制SPI
06.線(xiàn)程池
07.服務(wù)暴露Export
08. 服務(wù)參考 Refer
09.注冊處
10.動(dòng)態(tài)編譯
11. 動(dòng)態(tài)代理
12.服務(wù)調用Invoke
13.調用屬性
14.過(guò)濾器
15.NIO 服務(wù)器
16.P2P服務(wù)器
解決方案:OZON平臺產(chǎn)品審核不通過(guò)原因及產(chǎn)品上傳常見(jiàn)錯誤
OZON官方有兩種方式:?jiǎn)未紊蟼骱捅韱闻可蟼?。上傳后需要審核,目前是人工審核。很多賣(mài)家反映商品上傳后“拒絕更新”,即商品審核不通過(guò)。是什么原因?
首先,確保您的產(chǎn)品或品牌可以在OZON上銷(xiāo)售或不受限制。
二、首次上傳填寫(xiě)商品信息前,一定要逐項查看填寫(xiě)的提示,并查看平臺買(mǎi)家端的listing,可以有效避免出現明顯錯誤。
三、賣(mài)家上傳圖片錯誤較多。上傳前,他還查看了官方知識庫中給出的詳細上傳圖片要求。
以下是根據采集
到的買(mǎi)家反饋和實(shí)踐經(jīng)驗總結的產(chǎn)品上傳常見(jiàn)錯誤列表:
1.產(chǎn)品圖片:圖片底色偏暗或雜亂。上傳的時(shí)候主圖最好是無(wú)價(jià)的白底圖(灰底圖也可以),白色的東西可以深色,總之一定要干凈整潔,尤其是主圖,尺寸等信息不應該出現在圖片中,只展示商品的全部?jì)热?,也應該整體展示,而不是只展示商品的一部分。對于服裝,主要圖片應顯示在正面。
2. 多SKU:一個(gè)產(chǎn)品只能上傳一個(gè)SKU。主副圖顏色必須與SKU數量一致,同一商品不能出現多個(gè)SKU。請注意,這是一個(gè)嚴重的問(wèn)題。
3.商品分類(lèi):上傳商品時(shí)商品分類(lèi)選擇有問(wèn)題,分類(lèi)不確定。建議在買(mǎi)家網(wǎng)站上搜索并確認產(chǎn)品類(lèi)別后再進(jìn)行選擇。
4、品牌問(wèn)題:選擇沒(méi)有品牌的產(chǎn)品,但在產(chǎn)品欄目、圖片或說(shuō)明中顯示品牌信息,或產(chǎn)品品牌信息不一致。
5.產(chǎn)品描述:描述太短,尺寸大小不對,收錄
廣告信息。
最后,如果產(chǎn)品已上傳但未通過(guò)審核,將鼠標移到提醒編號上,系統通常會(huì )顯示失敗原因。 查看全部
解決方案:如何使用 SkyWalking 給 Dubbo 服務(wù)做鏈路追蹤?
Skywalking監控截圖:
Apache Skywalking(孵化器)簡(jiǎn)介
Apache Skywalking (Incubator) 專(zhuān)為微服務(wù)架構和云原生架構系統設計,支持分布式鏈路跟蹤APM系統。Apache Skywalking(孵化器)通過(guò)加載探針采集
應用調用鏈接信息,對采集
到的調用鏈接信息進(jìn)行分析,生成應用間關(guān)系、服務(wù)間關(guān)系和服務(wù)指標。Apache Skywalking (Incubating) 目前支持多種語(yǔ)言,包括 Java、.Net Core、Node.js 和 Go 語(yǔ)言。
目前Skywalking已經(jīng)支持從6個(gè)可視化維度分析分布式系統的運行情況。
Dubbo與Apache Skywalking(孵化器)編寫(xiě)Dubbo示例程序
Dubbo示例程序已經(jīng)上傳到Github倉庫。方便大家下載使用。
API工程
服務(wù)接口:
package?org.apache.skywalking.demo.interfaces;<br /><br />public?interface?HelloService?{<br />????String?sayHello(String?name);<br />}<br />
Dubbo服務(wù)提供項目
package?org.apache.skywalking.demo.provider;<br /><br />@Service(version?=?"${demo.service.version}",<br />????application?=?"${dubbo.application.id}",<br />????protocol?=?"${dubbo.protocol.id}",<br />????registry?=?"${dubbo.registry.id}",?timeout?=?60000)<br />public?class?HelloServiceImpl?implements?HelloService?{<br /><br />????public?String?sayHello(String?name)?{<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(1));<br />????????return?"Hello,?"?+?name;<br />????}<br /><br />}<br />
消費者工程
package?org.apache.skywalking.demo.consumer;<br /><br />@RestController<br />public?class?ConsumerController?{<br /><br />????private?static?int?COUNT?=?0;<br /><br />????@Reference(version?=?"${demo.service.version}",<br />????????application?=?"${dubbo.application.id}",<br />????????url?=?"dubbo://localhost:20880",?timeout?=?60000)<br />????private?HelloService?helloService;<br /><br />????@GetMapping("/sayHello/{name}")<br />????public?String?sayHello(@PathVariable(name?=?"name")?String?name)?{<br />????????if?((COUNT++)?%?3?==?0){<br />????????????throw?new?RuntimeException();<br />????????}<br />????????LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(2));<br />????????return?helloService.sayHello(name);<br />????}<br />}<br />
部署 Apache Skywalking(孵化器)
Apache Skywalking(孵化器)提供兩種部署模式:?jiǎn)喂濣c(diǎn)模式和集群模式。以下是單節點(diǎn)模式部署步驟。有關(guān)集群模式部署的詳細信息,請參閱文檔。
依賴(lài)第三方組件
JDK8+
彈性搜索 5.x
部署步驟
下載 Apache Skywalking 采集
器
部署彈性搜索
解壓縮并啟動(dòng) Skywalking Collector。運行 bin/startup.sh 命令啟動(dòng) Skywalking Collector
啟動(dòng)示例程序
在啟動(dòng)示例程序之前,先執行編譯打包命令:

./mvnw?clean?package<br />
啟動(dòng)服務(wù)提供者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-provider?-Dskywalking.collector.servers=localhost:10800?dubbo-provider/target/dubbo-provider.jar<br />
啟動(dòng)服務(wù)消費者
java?-jar?-javaagent:$AGENT_PATH/skywalking-agent.jar?-Dskywalking.agent.application_code=dubbo-consumer?-Dskywalking.collector.servers=localhost:10800?dubbo-consumer/target/dubbo-consumer.jar?<br />
獲得消費者提供的服務(wù)
curl?http://localhost:8080/sayHello/test<br />
Skywalking監控截圖:首頁(yè)
/admin-guide/images/skywalking-dashboard.png 拓撲圖
/admin-guide/images/skywalking-topology.png 應用視圖
/admin-guide/images/skywalking-application.png
JVM信息
/admin-guide/images/skywalking-application_instance.png 服務(wù)視圖
服務(wù)消費者:
/admin-guide/images/skywalking-service-consumer.png
服務(wù)提供者:
/admin-guide/images/skywalking-service-provider.png 跟蹤視圖
/admin-guide/images/skywalking-trace.png

跨度信息:
/admin-guide/images/skywalking-span-Info.png 報警視圖
/admin-guide/images/skywalking-alarm.png
歡迎加入我的知識星球,一起探討架構,交流源碼。要加入,請按住下面的二維碼:
知識星球上已更新源碼,分析如下:
目前,《Dubbo源碼解析》目錄已在知識星球更新如下:
01.調試環(huán)境搭建
02.項目結構一覽
03.配置配置
04.核心流程清單
05.擴展機制SPI
06.線(xiàn)程池
07.服務(wù)暴露Export
08. 服務(wù)參考 Refer
09.注冊處
10.動(dòng)態(tài)編譯
11. 動(dòng)態(tài)代理
12.服務(wù)調用Invoke
13.調用屬性
14.過(guò)濾器
15.NIO 服務(wù)器
16.P2P服務(wù)器
解決方案:OZON平臺產(chǎn)品審核不通過(guò)原因及產(chǎn)品上傳常見(jiàn)錯誤
OZON官方有兩種方式:?jiǎn)未紊蟼骱捅韱闻可蟼?。上傳后需要審核,目前是人工審核。很多賣(mài)家反映商品上傳后“拒絕更新”,即商品審核不通過(guò)。是什么原因?
首先,確保您的產(chǎn)品或品牌可以在OZON上銷(xiāo)售或不受限制。
二、首次上傳填寫(xiě)商品信息前,一定要逐項查看填寫(xiě)的提示,并查看平臺買(mǎi)家端的listing,可以有效避免出現明顯錯誤。

三、賣(mài)家上傳圖片錯誤較多。上傳前,他還查看了官方知識庫中給出的詳細上傳圖片要求。
以下是根據采集
到的買(mǎi)家反饋和實(shí)踐經(jīng)驗總結的產(chǎn)品上傳常見(jiàn)錯誤列表:
1.產(chǎn)品圖片:圖片底色偏暗或雜亂。上傳的時(shí)候主圖最好是無(wú)價(jià)的白底圖(灰底圖也可以),白色的東西可以深色,總之一定要干凈整潔,尤其是主圖,尺寸等信息不應該出現在圖片中,只展示商品的全部?jì)热?,也應該整體展示,而不是只展示商品的一部分。對于服裝,主要圖片應顯示在正面。
2. 多SKU:一個(gè)產(chǎn)品只能上傳一個(gè)SKU。主副圖顏色必須與SKU數量一致,同一商品不能出現多個(gè)SKU。請注意,這是一個(gè)嚴重的問(wèn)題。

3.商品分類(lèi):上傳商品時(shí)商品分類(lèi)選擇有問(wèn)題,分類(lèi)不確定。建議在買(mǎi)家網(wǎng)站上搜索并確認產(chǎn)品類(lèi)別后再進(jìn)行選擇。
4、品牌問(wèn)題:選擇沒(méi)有品牌的產(chǎn)品,但在產(chǎn)品欄目、圖片或說(shuō)明中顯示品牌信息,或產(chǎn)品品牌信息不一致。
5.產(chǎn)品描述:描述太短,尺寸大小不對,收錄
廣告信息。
最后,如果產(chǎn)品已上傳但未通過(guò)審核,將鼠標移到提醒編號上,系統通常會(huì )顯示失敗原因。
分享文章:織夢(mèng)CMS實(shí)現復制文章自動(dòng)加出處信息(織夢(mèng)文章調用標簽)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 78 次瀏覽 ? 2022-11-21 02:29
如果你發(fā)現自己辛辛苦苦創(chuàng )作的很多文章被別人復制或采集
,沒(méi)有留下一個(gè)鏈接,你會(huì )不會(huì )非常生氣和郁悶?好在我們還有一些基本的保護措施可以減少損失,那就是使用javascript來(lái)實(shí)現對文章原作者的基本版權保護。復制或采集
時(shí),會(huì )自動(dòng)添加文章出處。其實(shí)這個(gè)功能的實(shí)現代碼很簡(jiǎn)單,只需要在內容頁(yè)模板(article_*.htm)的區域添加代碼即可:
document.body.oncopy = function (){
<p>
setTimeout(function (){
var text = clipboardData.getData("text");
if (text){
texttext = text + "rn本文轉載于{dede:global.cfg_webname/}:{dede:global.cfg_basehost/}-原文鏈接:"+location.href;
clipboardData.setData("text", text);
}
},100)
}
</p>
嗯,趕快試試吧!
技巧:什么工具可以輸入關(guān)鍵詞自動(dòng)生成文章?
一、文章采集工具來(lái)源
文章采集、聚合、二次收錄、權重站維護程序
普通的文章采集、批量采集和發(fā)布已經(jīng)不能滿(mǎn)足搜索引擎的需求。懂基本百度相似度算法simhash算法的人應該都做過(guò)文章相似度檢測。經(jīng)過(guò)我的實(shí)際測試,大部分偽原創(chuàng )文章搜索引擎都可以識別文章,真正優(yōu)質(zhì)的文章不僅要原創(chuàng ),還要有完整的語(yǔ)義,能夠完全幫助用戶(hù)解決問(wèn)題。比如像一個(gè)短視頻平臺,如果一個(gè)視頻從頭到尾都是廢話(huà),沒(méi)有回答開(kāi)頭提出的問(wèn)題,那你是不是要評論噴作者廢話(huà),跑題了;所以文章實(shí)用,第一時(shí)間解決用戶(hù)心中的疑惑,這是一篇好文章,
今天我們就來(lái)看看自媒體文章采集工具:
現在比較實(shí)用的媒體文章采集工具有易寫(xiě)文章采集工具,可以批量采集媒體文章,可以選擇不同的媒體平臺,還可以選擇內容發(fā)布時(shí)間,輸入你要搜索的內容即可 關(guān)鍵詞,可以獲得很多相關(guān)的內容素材,可以選擇下載,視頻采集方法同理。
什么是自媒體文章采集工具?
自媒體文章采集工具,顧名思義,就是一款可以采集自媒體文章的工具。
本工具可以采集
海量文章和圖片,為你的創(chuàng )作帶來(lái)靈感,操作簡(jiǎn)單方便。
對于素材需求高的工作室和公司,使用這個(gè)工具會(huì )節省很多時(shí)間。
2、趣快拍AI搜索聚合文章及問(wèn)答采集工具
通過(guò)整合百度(百度知乎)、搜狗(搜狗問(wèn)答)、360(360問(wèn)答)、新浪(新浪愛(ài)客)、今日頭條(悟空問(wèn)答)、知乎(知乎問(wèn)答、知乎話(huà)題)以及自媒體平臺今日頭條,搜狐、百家號利用自動(dòng)語(yǔ)義檢測算法、相似度檢測算法、段落拆分與組合,將不同文章中語(yǔ)義最接近的段落進(jìn)行整合,生成聚合優(yōu)質(zhì)文章。第一,可以滿(mǎn)足百度的相似度算法;原創(chuàng )優(yōu)質(zhì)文章段落,三是可以自定義內容模板,增加內容模板的原創(chuàng )性,這是普通采集工具無(wú)法企及的。
問(wèn)答聚合文章
網(wǎng)站日常秒收三、文章收錄工具聚合程序介紹
支持Google SEO文章生成100多種語(yǔ)言的外貿軟文,支持開(kāi)源CMS自動(dòng)發(fā)布。(目前支持zblog、WordPress、織夢(mèng)cms、帝國cms、迅銳cms、小旋風(fēng)蜘蛛池等自動(dòng)收發(fā)布自動(dòng)上傳),支持文章定時(shí)定量發(fā)布,支持html與純文本相互轉換。通過(guò)IF-TDF算法、simHash、NLP、段落分詞、完備的語(yǔ)義檢測算法,匹配優(yōu)質(zhì)內容,多搜索引擎內容聚合,提高內容原創(chuàng )性和可讀性;同時(shí)可以自定義內容模板,實(shí)現內容模板頁(yè)面的多樣性原創(chuàng )。
AI搜索提取文章合集
------------------by文子seo-button: 61910465----------------
[配置]
;搜索引擎(單篇文章模板只能設置這個(gè))
searchengine=知乎、今日頭條、新浪、百度、搜狗、360
;采集頁(yè)數(默認采集第一頁(yè),多頁(yè)會(huì )影響文章生成速度)
頁(yè)=1
;文本長(cháng)度(采集內容不得低于此文本長(cháng)度)
字符長(cháng)度=20
;標題樣式(關(guān)鍵詞和聯(lián)想詞不可移動(dòng))
titletype=關(guān)鍵詞 聯(lián)想詞
;同一篇文章允許被調用的次數
時(shí)間 = 3
;是否刪除原圖
delimg=否
;平臺名稱(chēng),
;z-blog 自動(dòng)發(fā)布:z-blog;
;帝國自動(dòng)發(fā)布:diguo
;織夢(mèng)自動(dòng)發(fā)布:dede;
;wordpress 自動(dòng)發(fā)布:wordpress;
;小旋風(fēng)式文章; 小軒風(fēng);
;迅銳CMS自動(dòng)發(fā)布:xunrui;
;留空會(huì )把生成的文章保存到shengcheng文件夾
平臺=z-博客
;生成的文章數
publish_num=1000
;發(fā)布間隔秒
發(fā)布時(shí)間=300
;定時(shí)更新,每天固定時(shí)間運行程序(如果不定時(shí),留空即可)
固定時(shí)間=
;是否打開(kāi)全文翻譯成英文,翻譯是yes,不翻譯是no
翻譯=否
;自動(dòng)檢測要翻譯的語(yǔ)言,默認auto
sl=自動(dòng)
tl=en
;html是否轉為文本格式,轉為yes,不轉為no
html_text=否 查看全部
分享文章:織夢(mèng)CMS實(shí)現復制文章自動(dòng)加出處信息(織夢(mèng)文章調用標簽)
如果你發(fā)現自己辛辛苦苦創(chuàng )作的很多文章被別人復制或采集
,沒(méi)有留下一個(gè)鏈接,你會(huì )不會(huì )非常生氣和郁悶?好在我們還有一些基本的保護措施可以減少損失,那就是使用javascript來(lái)實(shí)現對文章原作者的基本版權保護。復制或采集
時(shí),會(huì )自動(dòng)添加文章出處。其實(shí)這個(gè)功能的實(shí)現代碼很簡(jiǎn)單,只需要在內容頁(yè)模板(article_*.htm)的區域添加代碼即可:
document.body.oncopy = function (){
<p>

setTimeout(function (){
var text = clipboardData.getData("text");
if (text){
texttext = text + "rn本文轉載于{dede:global.cfg_webname/}:{dede:global.cfg_basehost/}-原文鏈接:"+location.href;
clipboardData.setData("text", text);

}
},100)
}
</p>
嗯,趕快試試吧!
技巧:什么工具可以輸入關(guān)鍵詞自動(dòng)生成文章?
一、文章采集工具來(lái)源
文章采集、聚合、二次收錄、權重站維護程序
普通的文章采集、批量采集和發(fā)布已經(jīng)不能滿(mǎn)足搜索引擎的需求。懂基本百度相似度算法simhash算法的人應該都做過(guò)文章相似度檢測。經(jīng)過(guò)我的實(shí)際測試,大部分偽原創(chuàng )文章搜索引擎都可以識別文章,真正優(yōu)質(zhì)的文章不僅要原創(chuàng ),還要有完整的語(yǔ)義,能夠完全幫助用戶(hù)解決問(wèn)題。比如像一個(gè)短視頻平臺,如果一個(gè)視頻從頭到尾都是廢話(huà),沒(méi)有回答開(kāi)頭提出的問(wèn)題,那你是不是要評論噴作者廢話(huà),跑題了;所以文章實(shí)用,第一時(shí)間解決用戶(hù)心中的疑惑,這是一篇好文章,
今天我們就來(lái)看看自媒體文章采集工具:
現在比較實(shí)用的媒體文章采集工具有易寫(xiě)文章采集工具,可以批量采集媒體文章,可以選擇不同的媒體平臺,還可以選擇內容發(fā)布時(shí)間,輸入你要搜索的內容即可 關(guān)鍵詞,可以獲得很多相關(guān)的內容素材,可以選擇下載,視頻采集方法同理。
什么是自媒體文章采集工具?
自媒體文章采集工具,顧名思義,就是一款可以采集自媒體文章的工具。
本工具可以采集
海量文章和圖片,為你的創(chuàng )作帶來(lái)靈感,操作簡(jiǎn)單方便。
對于素材需求高的工作室和公司,使用這個(gè)工具會(huì )節省很多時(shí)間。
2、趣快拍AI搜索聚合文章及問(wèn)答采集工具
通過(guò)整合百度(百度知乎)、搜狗(搜狗問(wèn)答)、360(360問(wèn)答)、新浪(新浪愛(ài)客)、今日頭條(悟空問(wèn)答)、知乎(知乎問(wèn)答、知乎話(huà)題)以及自媒體平臺今日頭條,搜狐、百家號利用自動(dòng)語(yǔ)義檢測算法、相似度檢測算法、段落拆分與組合,將不同文章中語(yǔ)義最接近的段落進(jìn)行整合,生成聚合優(yōu)質(zhì)文章。第一,可以滿(mǎn)足百度的相似度算法;原創(chuàng )優(yōu)質(zhì)文章段落,三是可以自定義內容模板,增加內容模板的原創(chuàng )性,這是普通采集工具無(wú)法企及的。
問(wèn)答聚合文章
網(wǎng)站日常秒收三、文章收錄工具聚合程序介紹
支持Google SEO文章生成100多種語(yǔ)言的外貿軟文,支持開(kāi)源CMS自動(dòng)發(fā)布。(目前支持zblog、WordPress、織夢(mèng)cms、帝國cms、迅銳cms、小旋風(fēng)蜘蛛池等自動(dòng)收發(fā)布自動(dòng)上傳),支持文章定時(shí)定量發(fā)布,支持html與純文本相互轉換。通過(guò)IF-TDF算法、simHash、NLP、段落分詞、完備的語(yǔ)義檢測算法,匹配優(yōu)質(zhì)內容,多搜索引擎內容聚合,提高內容原創(chuàng )性和可讀性;同時(shí)可以自定義內容模板,實(shí)現內容模板頁(yè)面的多樣性原創(chuàng )。

AI搜索提取文章合集
------------------by文子seo-button: 61910465----------------
[配置]
;搜索引擎(單篇文章模板只能設置這個(gè))
searchengine=知乎、今日頭條、新浪、百度、搜狗、360
;采集頁(yè)數(默認采集第一頁(yè),多頁(yè)會(huì )影響文章生成速度)
頁(yè)=1
;文本長(cháng)度(采集內容不得低于此文本長(cháng)度)
字符長(cháng)度=20
;標題樣式(關(guān)鍵詞和聯(lián)想詞不可移動(dòng))
titletype=關(guān)鍵詞 聯(lián)想詞
;同一篇文章允許被調用的次數
時(shí)間 = 3
;是否刪除原圖
delimg=否
;平臺名稱(chēng),
;z-blog 自動(dòng)發(fā)布:z-blog;
;帝國自動(dòng)發(fā)布:diguo
;織夢(mèng)自動(dòng)發(fā)布:dede;

;wordpress 自動(dòng)發(fā)布:wordpress;
;小旋風(fēng)式文章; 小軒風(fēng);
;迅銳CMS自動(dòng)發(fā)布:xunrui;
;留空會(huì )把生成的文章保存到shengcheng文件夾
平臺=z-博客
;生成的文章數
publish_num=1000
;發(fā)布間隔秒
發(fā)布時(shí)間=300
;定時(shí)更新,每天固定時(shí)間運行程序(如果不定時(shí),留空即可)
固定時(shí)間=
;是否打開(kāi)全文翻譯成英文,翻譯是yes,不翻譯是no
翻譯=否
;自動(dòng)檢測要翻譯的語(yǔ)言,默認auto
sl=自動(dòng)
tl=en
;html是否轉為文本格式,轉為yes,不轉為no
html_text=否
解決方案:CN113726526A_人臉數據采集、驗證的方法、設備及系統在審
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 122 次瀏覽 ? 2022-11-20 08:17
人臉數據采集、驗證的方法、設備及系統
技術(shù)領(lǐng)域
本申請涉及信息技術(shù)領(lǐng)域,尤其涉及一種人臉數據采集、驗證的方法、設備及系統。
背景技術(shù)
隨著(zhù)信息技術(shù)的發(fā)展,越來(lái)越多的場(chǎng)景中會(huì )使用到人臉識別技術(shù)。在使用人臉識別技術(shù)時(shí),首先需要采集人臉數據,然后將采集到的人臉數據發(fā)送給處理設備中進(jìn)行人臉識別。該上述過(guò)程中存在著(zhù)人臉數據重放攻擊風(fēng)險,即攻擊者使用此前交易中截獲的人臉數據,或者在其他渠道獲取的用戶(hù)人臉數據,在人臉識別的通訊報文中進(jìn)行替換,從而偽冒用戶(hù)達到欺騙識別設備的目的。目前的解決方案一般是通過(guò)對報文完整性的保護來(lái)進(jìn)行防范,如使用報文簽名或者計算報文MAC(Media Access Control,介質(zhì)訪(fǎng)問(wèn)控制)地址的方式,但是此種并不能從采集源頭上防止重放攻擊,仍然存在一定的安全風(fēng)險。
發(fā)明內容
本申請的一個(gè)目的是提供一種人臉數據采集、驗證的方案,用以解決現有方案中無(wú)法從采集源頭上防止了重放攻擊的問(wèn)題。
本申請實(shí)施例提供了一種人臉數據采集方法,所述方法包括:
采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
本申請實(shí)施例還提供了一種人臉數據驗證方法,所述方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
所述人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
采集設備獲取所述隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集的采集設備,所述采集設備包括:
數據接收裝置,用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;
視頻采集模塊,用于采集人臉樣本;
人臉輸出模塊,用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,其中,所述人臉識別服務(wù)器包括:
數據收發(fā)模塊,用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
數據處理模塊,用于生成所述隨機數,對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證,在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,該系統包括:
采集設備,用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
人臉識別服務(wù)器,用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種計算設備,該設備包括用于存儲計算機程序指令的存儲器和用于執行計算機程序指令的處理器,其中,當該計算機程序指令被該處理器執行時(shí),觸發(fā)所述設備執行所述的方法。
此外,本申請實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現所述的方法。
本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會(huì )變得更明顯:
圖1為本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程圖;
圖2為本申請實(shí)施例中可信人臉數據的一種數據構成示意圖;
圖3為本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程圖;
圖4為采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程圖;
圖5為本申請實(shí)施例提供的一種人臉數據采集和驗證的方法的處理流程圖;
圖6為本申請實(shí)施例提供的另一種人臉數據采集和驗證的方法的處理流程圖;
圖7為本申請實(shí)施例提供的一種計算設備的結構示意圖;
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實(shí)施方式
下面結合附圖對本申請作進(jìn)一步詳細描述。
在本申請一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò )的設備均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò )接口和內存。
內存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性?xún)却娴刃问?,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體,可以由任何方法或技術(shù)來(lái)實(shí)現信息存儲。信息可以是計算機可讀指令、數據結構、程序的裝置或其他數據。計算機的存儲介質(zhì)的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動(dòng)態(tài)隨機存取存儲器(DRAM)、其他類(lèi)型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術(shù)、只讀光盤(pán)(CD-ROM)、數字多功能光盤(pán)(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤(pán)存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪(fǎng)問(wèn)的信息。
本申請實(shí)施例提供了一種人臉數據采集及驗證方法,由采集設備實(shí)現人臉數據的采集,并由人臉識別服務(wù)器實(shí)現人臉數據的驗證,該方案在采集設備上就對人臉樣本添加了用于校驗的內容,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
在實(shí)際場(chǎng)景中,所述采集設備可以是具有視頻采集及信息處理功能的電子設備,例如收錄
攝像頭以及數據處理芯片的設備。其中,所述攝像頭可以是能夠采集彩色圖像的普通攝像頭,或者也可以是能夠采集深度信息、紅外信息等額外信息的攝像頭。所述人臉識別服務(wù)器在實(shí)現時(shí)可以包括但不限于單個(gè)網(wǎng)絡(luò )服務(wù)器、多個(gè)網(wǎng)絡(luò )服務(wù)器集或基于云計算的計算機集合等實(shí)現,可以用于實(shí)現設置鬧鐘時(shí)的部分處理功能。在此,云由基于云計算(Cloud Computing)的大量主機或網(wǎng)絡(luò )服務(wù)器構成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個(gè)虛擬計算機。
圖1示出了本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程,包括以下處理步驟:
步驟S101,采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本。所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
步驟S102,采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。其中,所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
步驟S103,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
圖3示出了本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程,包括以下處理步驟:
步驟S301,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
步驟S302,人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得。
步驟S303,人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證。其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
步驟S304,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
步驟S305,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數進(jìn)行驗證,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。由此,人臉識別服務(wù)器在生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備時(shí),可以接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,而后根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
圖4示出了采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程,具體流程包括準備階段和使用階段。其中,準備階段的流程如下:
P1)為采集設備配置設備ID(即設備標識)和設備可信密鑰對,其中設備ID是與每臺采集設備一一對應的,設備可信密鑰對可以是每臺采集設備一套,也可以是一批次采集設備共享一套。在使用階段之前,將設備ID和其對應的設備可信密鑰對中的設備公鑰上傳到可信管理服務(wù)器上。
P2)采集設備在出廠(chǎng)時(shí),在每一臺采集設備寫(xiě)入其對應的設備ID,用來(lái)唯一標識該采集設備;另外,需要在采集設備中寫(xiě)入設備可信密鑰對的設備私鑰以及對應的設備公鑰證書(shū)。
P3)人臉識別服務(wù)器從可信管理服務(wù)器獲取到其用以簽發(fā)設備公鑰證書(shū)的私鑰所對應的公鑰。
使用階段的流程如下:
S1)用戶(hù)在本地業(yè)務(wù)終端上發(fā)起業(yè)務(wù)請求,例如實(shí)際場(chǎng)景中可以是人臉認證、人臉識別等與需要基于人臉數據實(shí)現的業(yè)務(wù)請求,本地業(yè)務(wù)終端從人臉識別服務(wù)器請求一個(gè)隨機數;
S2)本地業(yè)務(wù)終端調用采集設備對用戶(hù)進(jìn)行人臉采集,并將隨機數發(fā)送給采集設備;
S3)采集設備對用戶(hù)人臉的原創(chuàng )
樣本進(jìn)行采集后,經(jīng)過(guò)質(zhì)量判斷和活體檢測后,作為人臉樣本與設備標識、傳入的隨機數等信息一起使用設備私鑰進(jìn)行簽名,獲得人臉數據簽名,然后與收錄
設備公鑰的數字證書(shū)一起形成可信人臉數據后,返回給本地業(yè)務(wù)終端。
S4)本地業(yè)務(wù)終端將獲得的可信人臉數據塊送至人臉識別服務(wù)器進(jìn)行處理。
S5)人臉識別服務(wù)器對可信人臉數據進(jìn)行驗證,具體方法為:先使用可信管理服務(wù)器公鑰驗證可信人臉數據中附帶的數字證書(shū)的合法性。如果驗證通過(guò),則使用該數字證書(shū)中的設備公鑰,驗證可信人臉數據中的人臉數據簽名的合法性。如果驗證通過(guò),則驗證可信人臉數據中的隨機數與人臉識別服務(wù)器生成并保存的隨機數是否一致。如果一致,則認為驗證通過(guò),可以使用該可信人臉數據中的人臉樣本進(jìn)行后續業(yè)務(wù)處理,例如進(jìn)行人臉注冊或者人臉識別等;
S6)人臉識別服務(wù)器返回處理結果給本地業(yè)務(wù)終端,例如人臉注冊或者人臉識別的結果是否成功。
基于前述人臉數據的采集方案和驗證方案,本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法所涉及的人臉識別服務(wù)器和采集設備的交互過(guò)程如下圖5所示,包括如下步驟:
步驟S501,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
步驟S502,采集設備獲取所述隨機數,并采集人臉樣本;
步驟S503,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S504,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S505,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據;
步驟S506,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S507,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S508,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的一些實(shí)施例中,實(shí)現人臉數據采集和驗證的方法時(shí),還可以包括本地業(yè)務(wù)終端,所述本地業(yè)務(wù)終端與人臉識別服務(wù)器、采集設備之間的交互過(guò)程如下圖6所示,包括如下步驟:
步驟S601,本地業(yè)務(wù)終端獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令;
步驟S602,本地業(yè)務(wù)終端向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;
步驟S603,人臉識別服務(wù)器根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數;
步驟S604,人臉識別服務(wù)器向所述本地業(yè)務(wù)終端返回所述隨機數;
步驟S605,本地業(yè)務(wù)終端向所述采集設備發(fā)送采集調用指令和所述隨機數;
步驟S606,采集設備獲取所述隨機數,并根據采集調用指令采集人臉樣本;
步驟S607,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S608,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S609,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。采集設備在生成可信人臉數據之后,可以先將其發(fā)送給本地業(yè)務(wù)終端,再由本地業(yè)務(wù)終端將可信人臉數據發(fā)送至人臉識別服務(wù)器。
步驟S610,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S611,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S612,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
基于同一發(fā)明構思,本申請實(shí)施例中還提供了用于人臉數據采集的采集設備、用于人臉數據驗證的人臉識別服務(wù)器以及用于實(shí)現人臉數據采集和驗證的系統,所述采集設備、人臉識別服務(wù)器和系統對應的方法是前述實(shí)施例中相應方法,并且其解決問(wèn)題的原理與該方法相似。
本申請實(shí)施例提供的一種用于人臉數據采集的采集設備的結構可以至少包括數據接收裝置、視頻采集模塊和人臉輸出模塊。其中,所述數據接收裝置用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;所述視頻采集模塊用于采集人臉樣本;所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
由此,本申請的一些實(shí)施例中,所述視頻采集模塊可以包括采集單元和檢測評估單元,所述采集單元用于采集人臉的原創(chuàng )
樣本,而所述檢測評估單元用于對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在獲得待簽名數據和人臉數據簽名之后,人臉輸出模塊可以根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。由此,本申請的一些實(shí)施例中,所述采集設備還可以包括數據接收模塊,該數據接收模塊用于在獲取人臉的原創(chuàng )
樣本之前,獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,該人臉識別服務(wù)器可以包括數據收發(fā)模塊和數據處理模塊。其中,數據收發(fā)模塊用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得人臉數據簽名。
所述數據處理模塊用于生成所述隨機數,以及根據可信人臉數據進(jìn)行各種驗證,包括用于對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證、使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證以及對校驗數據進(jìn)行校驗數據驗證。
其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器的數據處理模塊使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器的數據處理模塊對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,所述數據收發(fā)模塊還用于接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,并向所述本地業(yè)務(wù)終端返回隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備;所述數據處理模塊還用于根據所述隨機數獲取請求生成隨機數。即用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。
此外,本申請的一些實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,系統至少包括采集設備和人臉識別服務(wù)器。
采集設備用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
人臉識別服務(wù)器則用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請的另一實(shí)施例中,所述該系統還可以包括本地業(yè)務(wù)終端。所述本地業(yè)務(wù)終端用于獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令,并向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;以及向所述采集設備發(fā)送采集調用指令和所述隨機數。
所述采集裝置在采集人臉樣本時(shí),可以根據所述采集調用指令采集人臉樣本;而所述人臉識別服務(wù)器在提供隨機數時(shí),可以根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
綜上所述,本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
另外,本申請的一部分可被應用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執行時(shí),通過(guò)該計算機的操作,可以調用或提供根據本申請的方法和/或技術(shù)方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一些實(shí)施例包括一個(gè)如圖7所示的計算設備,該設備包括存儲有計算機可讀指令的一個(gè)或多個(gè)存儲器710和用于執行計算機可讀指令的處理器720,其中,當該計算機可讀指令被該處理器執行時(shí),使得所述設備執行基于前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
此外,本申請的一些實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專(zhuān)用集成電路(ASIC)、通用目的計算機或任何其他類(lèi)似硬件設備來(lái)實(shí)現。在一些實(shí)施例中,本申請的軟件程序可以通過(guò)處理器執行以實(shí)現上文步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數據結構)可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅動(dòng)器或軟磁盤(pán)及類(lèi)似設備。另外,本申請的一些步驟或功能可采用硬件來(lái)實(shí)現,例如,作為與處理器配合從而執行各個(gè)步驟或功能的電路。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細節,而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現本申請。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權利要求而不是上述說(shuō)明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數不排除復數。裝置權利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現。第一,第二等詞語(yǔ)用來(lái)表示名稱(chēng),而并不表示任何特定的順序。
整套解決方案:優(yōu)采云
采集器之PBOOTCMS入庫
網(wǎng)上已經(jīng)有優(yōu)采云
采集
器的使用方法。
我正在使用從云端下載的 優(yōu)采云
PBOOTCMS 規則。但是在使用的時(shí)候發(fā)現在存儲選擇中只能存儲新聞中心、新聞動(dòng)態(tài)和公司動(dòng)態(tài)三個(gè)類(lèi)別。
今天我們就來(lái)說(shuō)說(shuō)如何修改存儲列。順帶從頭到尾說(shuō)說(shuō)優(yōu)采云
的使用方法。
大哥step:下載插件。
首先我們在后臺云平臺上搜索PBOOT找到這個(gè)插件,然后下載。
看一下,這里可以看到一個(gè)APP的logo:PbootDemoSkycaiji
這個(gè)方法就是下載官方插件的方法?;蛘?,您可以自己發(fā)布一個(gè)插件。
自己發(fā)布還是官方下載都無(wú)所謂。如果不是很熟悉,直接使用官方插件即可。
第 2 步:讓我們創(chuàng )建一個(gè)新任務(wù)。
你可以隨意填寫(xiě)。
然后點(diǎn)擊:采集器設置
根據需要填寫(xiě)這些內容。
然后設置其他三個(gè),比較簡(jiǎn)單。在此不再贅述。
第 3 步:讓我們點(diǎn)擊發(fā)布設置。
按選擇,然后選擇綁定。
這時(shí)候會(huì )報錯。由于PBOOCMS不是系統已知的CMS,所以需要添加:@pboot
下面的插件會(huì )顯示我們自己創(chuàng )建安裝的插件。選擇您使用的那個(gè)。如果我選擇從云平臺下載的pboot示例。
根據需要填寫(xiě)相關(guān)選項。
這時(shí)我們會(huì )發(fā)現,在分類(lèi)欄目中,我們只能看到三個(gè)欄目:新聞中心、公司新聞、行業(yè)新聞。
這也是我們今天要講的重點(diǎn)。
正如我們剛才所說(shuō),這是要記住的事情。這實(shí)際上是發(fā)布時(shí)調用的 PHP 文件。具體路徑為: 在你的優(yōu)采云
采集
網(wǎng)站的根目錄下,找到這個(gè)文件夾:
\\plugin\\release\\cms
可以看到,有兩個(gè)與剛才APP名稱(chēng)同名的PHP文件。你使用哪個(gè)插件對應修改哪個(gè)PHP文件。
我用的是官方的PbootDemoSkycaiji,我們打開(kāi)這個(gè)PHP文件。
在醉酒的底部我們看到
public?function?param_option_category(){
<p>
$catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}</p>
它指定了一個(gè)news.html,如果你改成:case.html,你會(huì )在優(yōu)采云
的后臺看到publication classification變成了一個(gè)case欄。因此,如果我們要顯示所有的列,我們可以這樣修改。
public?function?param_option_category(){
$catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}
然后回到發(fā)布后臺,就可以看到了。列出所有列。然后正常采集
和釋放。 查看全部
解決方案:CN113726526A_人臉數據采集、驗證的方法、設備及系統在審
人臉數據采集、驗證的方法、設備及系統
技術(shù)領(lǐng)域
本申請涉及信息技術(shù)領(lǐng)域,尤其涉及一種人臉數據采集、驗證的方法、設備及系統。
背景技術(shù)
隨著(zhù)信息技術(shù)的發(fā)展,越來(lái)越多的場(chǎng)景中會(huì )使用到人臉識別技術(shù)。在使用人臉識別技術(shù)時(shí),首先需要采集人臉數據,然后將采集到的人臉數據發(fā)送給處理設備中進(jìn)行人臉識別。該上述過(guò)程中存在著(zhù)人臉數據重放攻擊風(fēng)險,即攻擊者使用此前交易中截獲的人臉數據,或者在其他渠道獲取的用戶(hù)人臉數據,在人臉識別的通訊報文中進(jìn)行替換,從而偽冒用戶(hù)達到欺騙識別設備的目的。目前的解決方案一般是通過(guò)對報文完整性的保護來(lái)進(jìn)行防范,如使用報文簽名或者計算報文MAC(Media Access Control,介質(zhì)訪(fǎng)問(wèn)控制)地址的方式,但是此種并不能從采集源頭上防止重放攻擊,仍然存在一定的安全風(fēng)險。
發(fā)明內容
本申請的一個(gè)目的是提供一種人臉數據采集、驗證的方案,用以解決現有方案中無(wú)法從采集源頭上防止了重放攻擊的問(wèn)題。
本申請實(shí)施例提供了一種人臉數據采集方法,所述方法包括:
采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
本申請實(shí)施例還提供了一種人臉數據驗證方法,所述方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
所述人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法包括:
人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
采集設備獲取所述隨機數,并采集人臉樣本;
所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集的采集設備,所述采集設備包括:
數據接收裝置,用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;
視頻采集模塊,用于采集人臉樣本;
人臉輸出模塊,用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,其中,所述人臉識別服務(wù)器包括:
數據收發(fā)模塊,用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據,其中,所述可信人臉數據包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得;
數據處理模塊,用于生成所述隨機數,對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證,在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,該系統包括:
采集設備,用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
人臉識別服務(wù)器,用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請實(shí)施例還提供了一種計算設備,該設備包括用于存儲計算機程序指令的存儲器和用于執行計算機程序指令的處理器,其中,當該計算機程序指令被該處理器執行時(shí),觸發(fā)所述設備執行所述的方法。
此外,本申請實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現所述的方法。
本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會(huì )變得更明顯:
圖1為本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程圖;
圖2為本申請實(shí)施例中可信人臉數據的一種數據構成示意圖;
圖3為本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程圖;
圖4為采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程圖;
圖5為本申請實(shí)施例提供的一種人臉數據采集和驗證的方法的處理流程圖;
圖6為本申請實(shí)施例提供的另一種人臉數據采集和驗證的方法的處理流程圖;

圖7為本申請實(shí)施例提供的一種計算設備的結構示意圖;
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實(shí)施方式
下面結合附圖對本申請作進(jìn)一步詳細描述。
在本申請一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò )的設備均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò )接口和內存。
內存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性?xún)却娴刃问?,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體,可以由任何方法或技術(shù)來(lái)實(shí)現信息存儲。信息可以是計算機可讀指令、數據結構、程序的裝置或其他數據。計算機的存儲介質(zhì)的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動(dòng)態(tài)隨機存取存儲器(DRAM)、其他類(lèi)型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術(shù)、只讀光盤(pán)(CD-ROM)、數字多功能光盤(pán)(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤(pán)存儲或其他磁性存儲設備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設備訪(fǎng)問(wèn)的信息。
本申請實(shí)施例提供了一種人臉數據采集及驗證方法,由采集設備實(shí)現人臉數據的采集,并由人臉識別服務(wù)器實(shí)現人臉數據的驗證,該方案在采集設備上就對人臉樣本添加了用于校驗的內容,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
在實(shí)際場(chǎng)景中,所述采集設備可以是具有視頻采集及信息處理功能的電子設備,例如收錄
攝像頭以及數據處理芯片的設備。其中,所述攝像頭可以是能夠采集彩色圖像的普通攝像頭,或者也可以是能夠采集深度信息、紅外信息等額外信息的攝像頭。所述人臉識別服務(wù)器在實(shí)現時(shí)可以包括但不限于單個(gè)網(wǎng)絡(luò )服務(wù)器、多個(gè)網(wǎng)絡(luò )服務(wù)器集或基于云計算的計算機集合等實(shí)現,可以用于實(shí)現設置鬧鐘時(shí)的部分處理功能。在此,云由基于云計算(Cloud Computing)的大量主機或網(wǎng)絡(luò )服務(wù)器構成,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個(gè)虛擬計算機。
圖1示出了本申請實(shí)施例中采集設備在實(shí)現人臉數據采集方法時(shí)的處理流程,包括以下處理步驟:
步驟S101,采集設備獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本。所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
步驟S102,采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。其中,所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
步驟S103,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
圖3示出了本申請實(shí)施例提供的人臉識別服務(wù)器在實(shí)現人臉數據驗證方法時(shí)的處理流程,包括以下處理步驟:
步驟S301,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;
步驟S302,人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得。
步驟S303,人臉識別服務(wù)器對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證。其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
步驟S304,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
步驟S305,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數進(jìn)行驗證,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。由此,人臉識別服務(wù)器在生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備時(shí),可以接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,而后根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
圖4示出了采用本申請實(shí)施提供的方案實(shí)現人臉數據采集和驗證時(shí)各方設備之間的交互流程,具體流程包括準備階段和使用階段。其中,準備階段的流程如下:
P1)為采集設備配置設備ID(即設備標識)和設備可信密鑰對,其中設備ID是與每臺采集設備一一對應的,設備可信密鑰對可以是每臺采集設備一套,也可以是一批次采集設備共享一套。在使用階段之前,將設備ID和其對應的設備可信密鑰對中的設備公鑰上傳到可信管理服務(wù)器上。
P2)采集設備在出廠(chǎng)時(shí),在每一臺采集設備寫(xiě)入其對應的設備ID,用來(lái)唯一標識該采集設備;另外,需要在采集設備中寫(xiě)入設備可信密鑰對的設備私鑰以及對應的設備公鑰證書(shū)。
P3)人臉識別服務(wù)器從可信管理服務(wù)器獲取到其用以簽發(fā)設備公鑰證書(shū)的私鑰所對應的公鑰。
使用階段的流程如下:
S1)用戶(hù)在本地業(yè)務(wù)終端上發(fā)起業(yè)務(wù)請求,例如實(shí)際場(chǎng)景中可以是人臉認證、人臉識別等與需要基于人臉數據實(shí)現的業(yè)務(wù)請求,本地業(yè)務(wù)終端從人臉識別服務(wù)器請求一個(gè)隨機數;
S2)本地業(yè)務(wù)終端調用采集設備對用戶(hù)進(jìn)行人臉采集,并將隨機數發(fā)送給采集設備;
S3)采集設備對用戶(hù)人臉的原創(chuàng )
樣本進(jìn)行采集后,經(jīng)過(guò)質(zhì)量判斷和活體檢測后,作為人臉樣本與設備標識、傳入的隨機數等信息一起使用設備私鑰進(jìn)行簽名,獲得人臉數據簽名,然后與收錄
設備公鑰的數字證書(shū)一起形成可信人臉數據后,返回給本地業(yè)務(wù)終端。
S4)本地業(yè)務(wù)終端將獲得的可信人臉數據塊送至人臉識別服務(wù)器進(jìn)行處理。
S5)人臉識別服務(wù)器對可信人臉數據進(jìn)行驗證,具體方法為:先使用可信管理服務(wù)器公鑰驗證可信人臉數據中附帶的數字證書(shū)的合法性。如果驗證通過(guò),則使用該數字證書(shū)中的設備公鑰,驗證可信人臉數據中的人臉數據簽名的合法性。如果驗證通過(guò),則驗證可信人臉數據中的隨機數與人臉識別服務(wù)器生成并保存的隨機數是否一致。如果一致,則認為驗證通過(guò),可以使用該可信人臉數據中的人臉樣本進(jìn)行后續業(yè)務(wù)處理,例如進(jìn)行人臉注冊或者人臉識別等;
S6)人臉識別服務(wù)器返回處理結果給本地業(yè)務(wù)終端,例如人臉注冊或者人臉識別的結果是否成功。
基于前述人臉數據的采集方案和驗證方案,本申請實(shí)施例還提供了一種人臉數據采集和驗證的方法,該方法所涉及的人臉識別服務(wù)器和采集設備的交互過(guò)程如下圖5所示,包括如下步驟:
步驟S501,人臉識別服務(wù)器生成對應于本次人臉數據采集的隨機數,并將其提供給采集設備;
步驟S502,采集設備獲取所述隨機數,并采集人臉樣本;
步驟S503,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S504,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S505,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據;

步驟S506,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S507,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S508,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的一些實(shí)施例中,實(shí)現人臉數據采集和驗證的方法時(shí),還可以包括本地業(yè)務(wù)終端,所述本地業(yè)務(wù)終端與人臉識別服務(wù)器、采集設備之間的交互過(guò)程如下圖6所示,包括如下步驟:
步驟S601,本地業(yè)務(wù)終端獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令;
步驟S602,本地業(yè)務(wù)終端向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;
步驟S603,人臉識別服務(wù)器根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數;
步驟S604,人臉識別服務(wù)器向所述本地業(yè)務(wù)終端返回所述隨機數;
步驟S605,本地業(yè)務(wù)終端向所述采集設備發(fā)送采集調用指令和所述隨機數;
步驟S606,采集設備獲取所述隨機數,并根據采集調用指令采集人臉樣本;
步驟S607,所述采集設備將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,其中,所述校驗數據包括所述隨機數;
步驟S608,所述采集設備根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據;
步驟S609,所述人臉識別服務(wù)器獲取由采集設備生成的可信人臉數據。采集設備在生成可信人臉數據之后,可以先將其發(fā)送給本地業(yè)務(wù)終端,再由本地業(yè)務(wù)終端將可信人臉數據發(fā)送至人臉識別服務(wù)器。
步驟S610,所述人臉識別服務(wù)器對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;
步驟S611,在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;
步驟S612,在通過(guò)簽名驗證后,所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
基于同一發(fā)明構思,本申請實(shí)施例中還提供了用于人臉數據采集的采集設備、用于人臉數據驗證的人臉識別服務(wù)器以及用于實(shí)現人臉數據采集和驗證的系統,所述采集設備、人臉識別服務(wù)器和系統對應的方法是前述實(shí)施例中相應方法,并且其解決問(wèn)題的原理與該方法相似。
本申請實(shí)施例提供的一種用于人臉數據采集的采集設備的結構可以至少包括數據接收裝置、視頻采集模塊和人臉輸出模塊。其中,所述數據接收裝置用于獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;所述視頻采集模塊用于采集人臉樣本;所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,并根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據,其中,所述校驗數據包括所述隨機數。
所述人臉樣本可以是收錄
人臉圖像的視頻數據和/或人臉3D數據,可以通過(guò)各類(lèi)具有視頻采集功能的裝置實(shí)現,例如RGB攝像頭、深度攝像頭等。
在本申請的一些實(shí)施例中,可以將攝像頭直接采集到的數據作為人臉的原創(chuàng )
樣本,而后對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。其中,所述質(zhì)量評估是指對人臉的原創(chuàng )
樣本的質(zhì)量進(jìn)行評估,以判斷采集到的數據是否符合后續人臉識別處理的要求。對圖像進(jìn)行質(zhì)量評估后,避免將不符合識別要求的人臉樣本進(jìn)行人臉識別,可以提高后續人臉識別處理時(shí)的準確度。實(shí)際場(chǎng)景中,可以根據人臉圖像區域占整體圖像區域的大小、人臉圖像的清晰度、圖像中收錄
的人臉的完整度、人臉的姿態(tài)和角度、人臉的光照情況等進(jìn)行質(zhì)量評估,通過(guò)設定閾值的方式判斷上述的質(zhì)量評估項是否滿(mǎn)足要求,若滿(mǎn)足要求,則判定為通過(guò)質(zhì)量評估;若不滿(mǎn)足要求,則判定為未通過(guò)質(zhì)量評估。例如,本實(shí)施例中可以設定質(zhì)量評估項包括:人臉圖像區域占整體圖像區域是否大于60%,人臉完整度大于90%,人臉正面與鏡頭的角度小于20°,若采集的原創(chuàng )
樣本符合所有的閾值,則可以認為該原創(chuàng )
樣本通過(guò)了質(zhì)量評估。
活體檢測是用于確定采集的原創(chuàng )
樣本是否來(lái)自于用戶(hù)本人活體,而不是來(lái)自于攻擊者持有的圖片、視頻或者面具等假體,從而進(jìn)一步提升安全性。在實(shí)際場(chǎng)景中,活體檢測可以根據應用場(chǎng)景的不同,而采用不同的檢測方式,例如若用于采集原創(chuàng )
樣本的攝像頭僅可以獲取二維圖像數據,則可以采用動(dòng)作配合式的活體檢測,由顯示屏等輸出裝置提示用戶(hù)執行相應的動(dòng)作,由于假體一般無(wú)法根據提示做出相應的動(dòng)作,因此可以根據二維圖像數據判定用戶(hù)是否在預設時(shí)間內做出了相應的動(dòng)作,從而判斷采集到的原創(chuàng )
樣本是否來(lái)自于活體。若用于采集原創(chuàng )
樣本的攝像頭還可以采集到紅外信息、深度信息等,則可以采用利用紅外或者深度圖像的活體檢測方式。
由此,本申請的一些實(shí)施例中,所述視頻采集模塊可以包括采集單元和檢測評估單元,所述采集單元用于采集人臉的原創(chuàng )
樣本,而所述檢測評估單元用于對所述原創(chuàng )
樣本進(jìn)行質(zhì)量評估和/或活體檢測,將通過(guò)質(zhì)量評估和/或活體檢測的原創(chuàng )
樣本作為人臉樣本。
在本申請實(shí)施例中,可以根據實(shí)際應用場(chǎng)景的需求同時(shí)采用質(zhì)量評估和活體檢測,或者也可以?xún)H采用其中一種。例如在本實(shí)施例中,會(huì )對原創(chuàng )
樣本同時(shí)進(jìn)行質(zhì)量評估和活體檢測,僅當同時(shí)通過(guò)質(zhì)量評估和活體檢測后,該人臉的原創(chuàng )
樣本才會(huì )作為人臉樣本,被用于后續的處理,否則可以重新采集原創(chuàng )
樣本直至通過(guò)質(zhì)量評估和活體檢測。
所述人臉輸出模塊用于將人臉樣本和校驗數據作為待簽名數據,使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名。所述校驗數據用于在后續驗證過(guò)程中使用,可以包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。每一次生成的隨機數都對應于一次的人臉數據采集和驗證,例如人臉識別服務(wù)器生成一個(gè)隨機數RN1后,會(huì )通過(guò)相應的方式將該隨機數RN1提供至采集設備,采集設備會(huì )在成功采集到一次人臉樣本F1后,該隨機數RN1會(huì )與本次采集到的人臉樣本F1一起作為待簽名數據。若采集設備進(jìn)行下一次采集時(shí),則不會(huì )再使用隨機數RN1,而是會(huì )獲得人臉識別服務(wù)器生成的一個(gè)新的隨機數RN2。由此,人臉識別服務(wù)器在生成隨機數RN1后,將其保存,當獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的隨機數與保存的隨機數比較,若都是RN1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在本申請的另一些實(shí)施例中,所述校驗數據還可以包括預先為所述采集設備分配的設備標識,由此可以同時(shí)使用隨機數和設備標識作為校驗數據的內容。所述設備標識與采集設備對應,預先為采集設備分配的方式可以在采集設備出廠(chǎng)時(shí)由廠(chǎng)商通過(guò)安全的方式生成并寫(xiě)入到采集設備內,或者也可以在采集設備初始化時(shí)由用戶(hù)進(jìn)行注冊、申請等。每臺采集設備可以有一個(gè)唯一的設備標識,即設備標識與采集設備一一對應。由此,將所述采集設備的設備標識作為校驗數據中的一項內容之后,人臉識別服務(wù)器可以通過(guò)其它方式獲取并存儲采集設備的設備標識,在獲取到人臉樣本F1對應的可信人臉數據之后,可以將其中的設備標識與預先存儲的設備標識比較,若兩者都是ID1,則驗證通過(guò),否則,可以認為獲得的數據不安全,驗證未通過(guò)。
在獲得待簽名數據和人臉數據簽名之后,人臉輸出模塊可以根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。例如,當待簽名數據收錄
人臉樣本、設備標識、隨機數時(shí),可信人臉數據中的數據構成可以如圖2所示。
所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA(Certificate Authority、證書(shū)授權)機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
在本申請的一些實(shí)施例中,采集設備在生成可信人臉數據之后,可以將所述可信人臉數據提供給至人臉識別服務(wù)器,以使所述人臉識別服務(wù)器對所述可信人臉數據進(jìn)行驗證。
在實(shí)際場(chǎng)景中,采集設備可以基于本地業(yè)務(wù)終端發(fā)送的采集調用指令來(lái)觸發(fā)人臉數據的采集。由此,本申請的一些實(shí)施例中,所述采集設備還可以包括數據接收模塊,該數據接收模塊用于在獲取人臉的原創(chuàng )
樣本之前,獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數。其中,本地業(yè)務(wù)終端可以是具有人臉驗證、人臉注冊等功能的設備,當用戶(hù)在本地業(yè)務(wù)終端執行特定的操作后,會(huì )啟動(dòng)相應的業(yè)務(wù)處理流程。例如,當用戶(hù)點(diǎn)擊某一按鈕后,即啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程,此時(shí)本地業(yè)務(wù)終端會(huì )生成相應的業(yè)務(wù)請求,該業(yè)務(wù)請求可以收錄
了采集調用指令,發(fā)送給采集設備后即可觸發(fā)采集設備執行前述的人臉數據采集方法。
同時(shí),本地業(yè)務(wù)終端啟動(dòng)了人臉注冊的業(yè)務(wù)處理流程后,會(huì )向人臉識別服務(wù)器請求一個(gè)隨機數,人臉識別服務(wù)器會(huì )根據該隨機數獲取請求生成一個(gè)隨機數并返回給本地業(yè)務(wù)終端。本地業(yè)務(wù)終端向采集終端發(fā)送的業(yè)務(wù)請求中也可以收錄
該隨機數,由此使得采集設備可以將該隨機數添加至可信人臉數據,以實(shí)現后續的驗證過(guò)程。即,采集設備在獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數,并采集人臉樣本時(shí),可以獲取本地業(yè)務(wù)終端發(fā)送的采集調用指令和對應于本次人臉數據采集的隨機數,并根據所述采集調用指令采集人臉樣本。其中,所述采集調用指令由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后生成,所述隨機數由所述人臉識別服務(wù)器生成,并由所述本地業(yè)務(wù)終端在獲取到用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求后向所述人臉識別服務(wù)器請求獲取。
本申請實(shí)施例還提供了一種用于人臉數據驗證的人臉識別服務(wù)器,該人臉識別服務(wù)器可以包括數據收發(fā)模塊和數據處理模塊。其中,數據收發(fā)模塊用于將對應于本次人臉數據采集的隨機數提供給采集設備,以使所述采集設備生成收錄
所述隨機數的可信人臉數據;以及獲取由采集設備生成的可信人臉數據。所述可信人臉數據的生成過(guò)程可以參考前述內容,此處不再贅述,可信人臉數據中包括待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),所述待簽名數據包括所述采集設備采集到的人臉樣本和校驗數據,所述校驗數據包括所述隨機數,所述人臉數據簽名由采集設備使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名獲得人臉數據簽名。
所述數據處理模塊用于生成所述隨機數,以及根據可信人臉數據進(jìn)行各種驗證,包括用于對收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證、使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證以及對校驗數據進(jìn)行校驗數據驗證。
其中,所述設備公鑰和設備私鑰為一個(gè)密鑰對,可以預先生成后,人臉數據的采集和驗證過(guò)程中使用。而所述收錄
設備公鑰的數字證書(shū)可以來(lái)自于可信管理服務(wù)器,所述可信管理服務(wù)器可以是CA機構的服務(wù)器,可用于證明該數字證書(shū)中的設備公鑰是合法、可信的。
數字證書(shū)中的內容可以包括至少收錄
設備公鑰的待簽名數據,使用可信管理服務(wù)器私鑰對該待簽名數據進(jìn)行簽名后所獲得的數字簽名。在驗證過(guò)程中,人臉識別服務(wù)器可以預先獲取可信管理服務(wù)器公鑰,使用可信管理服務(wù)器公鑰對數字證書(shū)中的數字簽名進(jìn)行解密,獲得數字簽名的原文,進(jìn)而與數字證書(shū)本身所攜帶的、至少收錄
設備公鑰的待簽名數據進(jìn)行比較,若完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。此外,若可信管理服務(wù)器私鑰處理收錄
設備公鑰的待簽名數據之前,對該待簽名數據進(jìn)行過(guò)哈希計算,則驗證時(shí)使用可信管理服務(wù)器公鑰解密獲得的原文即為進(jìn)行哈希計算后的摘要。此時(shí),人臉識別服務(wù)器要對數字證書(shū)中本身所攜帶、至少收錄
設備公鑰的待簽名數據采用同樣的哈希算法進(jìn)行計算,獲取到摘要之后,與通過(guò)可信管理服務(wù)器公鑰解密獲得的摘要進(jìn)行比較,若兩者完全一致,則說(shuō)明數字證書(shū)驗證通過(guò)。
在通過(guò)證書(shū)驗證后,所述人臉識別服務(wù)器的數據處理模塊使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證。由于可信人臉數據中的人臉數據簽名由待簽名數據通過(guò)設備私鑰加密獲得,因此理論上可以使用設備公鑰對人臉數據簽解密獲得數據原文,即收錄
人臉樣本和校驗數據的待簽名數據。由此,對人臉數據簽名進(jìn)行驗證過(guò)程與數字證書(shū)的驗證過(guò)程類(lèi)似,此處不再水煮,其區別在于數據簽名的驗證過(guò)程使用的密鑰為設備公鑰,而數字證書(shū)的驗證過(guò)程使用的密鑰為可信管理服務(wù)器公鑰。當人臉數據簽名驗證通過(guò)后,可以認為可信人臉數據中的待簽名數,即人臉樣本和校驗數據是合法、可信的,可以用于后續的處理。
在通過(guò)簽名驗證后,所述人臉識別服務(wù)器的數據處理模塊對校驗數據進(jìn)行驗證。在本申請的一些實(shí)施例中,所述校驗數據包括由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數。由此,人臉識別服務(wù)器對校驗數據進(jìn)行驗證時(shí),可以采用校驗數據中的隨機數,即所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
在本申請的另一些實(shí)施例中,若同時(shí)采用隨機數和設備標識進(jìn)行驗證時(shí),則所述人臉識別服務(wù)器對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,以及對校驗數據中收錄
的設備標識與預先存儲的、所述采集設備的設備標識進(jìn)行比較,若兩個(gè)比較結果均為相同,確認通過(guò)校驗數據驗證。
在實(shí)際場(chǎng)景中,所述數據收發(fā)模塊還用于接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求,并向所述本地業(yè)務(wù)終端返回隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備;所述數據處理模塊還用于根據所述隨機數獲取請求生成隨機數。即用于驗證的隨機數是人臉識別服務(wù)器在接收本地業(yè)務(wù)終端發(fā)送的隨機數獲取請求后,根據所述隨機數獲取請求生成,并向所述本地業(yè)務(wù)終端返回的。
此外,本申請的一些實(shí)施例還提供了一種用于人臉數據采集和驗證的系統,系統至少包括采集設備和人臉識別服務(wù)器。
采集設備用于獲取對應于本次人臉數據采集的隨機數,并采集人臉樣本;將所述人臉樣本和校驗數據作為待簽名數據,并使用預先為所述采集設備分配的設備私鑰進(jìn)行簽名,獲得人臉數據簽名,所述校驗數據包括所述隨機數;以及根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū),獲得可信人臉數據。
人臉識別服務(wù)器則用于人臉識別服務(wù)器生成所述隨機數,并將其提供給采集設備;獲取由采集設備生成的可信人臉數據,并對所述可信人臉數據中收錄
設備公鑰的數字證書(shū)進(jìn)行證書(shū)驗證;在通過(guò)證書(shū)驗證后,使用所述數字證書(shū)中的設備公鑰對人臉數據簽名進(jìn)行簽名驗證;以及在通過(guò)簽名驗證后,對校驗數據中收錄
的隨機數與生成后保存的隨機數進(jìn)行比較,基于相同的比較結果確認通過(guò)校驗數據驗證。
本申請的另一實(shí)施例中,所述該系統還可以包括本地業(yè)務(wù)終端。所述本地業(yè)務(wù)終端用于獲取用戶(hù)發(fā)起的人臉識別業(yè)務(wù)請求,根據所述人臉識別業(yè)務(wù)請求生成采集調用指令,并向所述人臉識別服務(wù)器發(fā)送隨機數獲取請求;獲取由人臉識別服務(wù)器生成的、對應于本次人臉數據采集的隨機數;以及向所述采集設備發(fā)送采集調用指令和所述隨機數。
所述采集裝置在采集人臉樣本時(shí),可以根據所述采集調用指令采集人臉樣本;而所述人臉識別服務(wù)器在提供隨機數時(shí),可以根據所述隨機數獲取請求生成對應于本次人臉數據采集的隨機數,并向所述本地業(yè)務(wù)終端返回所述隨機數,以使所述本地業(yè)務(wù)終端將所述隨機數提供給采集設備。
綜上所述,本申請實(shí)施例提供的方案中,采集設備在采集到人臉樣本后,將人臉樣本與收錄
隨機數的校驗數據一起構成待簽名數據,使用設備私鑰進(jìn)行簽名獲得人臉數據簽名,進(jìn)而根據所述待簽名數據、人臉數據簽名和收錄
設備公鑰的數字證書(shū)獲得可信人臉數據。人臉識別服務(wù)器在對采集設備生成的可信人臉數據進(jìn)行驗證時(shí),依次對收錄
設備公鑰的數字證書(shū)、人臉數據簽名以及校驗數據進(jìn)行驗證,在通過(guò)這些驗證之后,即完成驗證的過(guò)程,從而可將人臉樣本進(jìn)行業(yè)務(wù)處理。由于該方案在采集設備上就對人臉樣本添加了用于校驗的內容,其中收錄
的隨機數僅對應于本次人臉數據采集,有效提高了安全性,即時(shí)傳輸的通訊報文被攻擊者替換,也無(wú)法通過(guò)后續的驗證,因此從采集源頭上防止了重放攻擊。
另外,本申請的一部分可被應用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執行時(shí),通過(guò)該計算機的操作,可以調用或提供根據本申請的方法和/或技術(shù)方案。而調用本申請的方法的程序指令,可能被存儲在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號承載媒體中的數據流而被傳輸,和/或被存儲在根據程序指令運行的計算機設備的工作存儲器中。在此,根據本申請的一些實(shí)施例包括一個(gè)如圖7所示的計算設備,該設備包括存儲有計算機可讀指令的一個(gè)或多個(gè)存儲器710和用于執行計算機可讀指令的處理器720,其中,當該計算機可讀指令被該處理器執行時(shí),使得所述設備執行基于前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
此外,本申請的一些實(shí)施例還提供了一種計算機可讀介質(zhì),其上存儲有計算機程序指令,所述計算機可讀指令可被處理器執行以實(shí)現前述本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專(zhuān)用集成電路(ASIC)、通用目的計算機或任何其他類(lèi)似硬件設備來(lái)實(shí)現。在一些實(shí)施例中,本申請的軟件程序可以通過(guò)處理器執行以實(shí)現上文步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數據結構)可以被存儲到計算機可讀記錄介質(zhì)中,例如,RAM存儲器,磁或光驅動(dòng)器或軟磁盤(pán)及類(lèi)似設備。另外,本申請的一些步驟或功能可采用硬件來(lái)實(shí)現,例如,作為與處理器配合從而執行各個(gè)步驟或功能的電路。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細節,而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現本申請。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權利要求而不是上述說(shuō)明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本申請內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數不排除復數。裝置權利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現。第一,第二等詞語(yǔ)用來(lái)表示名稱(chēng),而并不表示任何特定的順序。
整套解決方案:優(yōu)采云
采集器之PBOOTCMS入庫
網(wǎng)上已經(jīng)有優(yōu)采云
采集
器的使用方法。
我正在使用從云端下載的 優(yōu)采云
PBOOTCMS 規則。但是在使用的時(shí)候發(fā)現在存儲選擇中只能存儲新聞中心、新聞動(dòng)態(tài)和公司動(dòng)態(tài)三個(gè)類(lèi)別。
今天我們就來(lái)說(shuō)說(shuō)如何修改存儲列。順帶從頭到尾說(shuō)說(shuō)優(yōu)采云
的使用方法。
大哥step:下載插件。
首先我們在后臺云平臺上搜索PBOOT找到這個(gè)插件,然后下載。
看一下,這里可以看到一個(gè)APP的logo:PbootDemoSkycaiji
這個(gè)方法就是下載官方插件的方法?;蛘?,您可以自己發(fā)布一個(gè)插件。
自己發(fā)布還是官方下載都無(wú)所謂。如果不是很熟悉,直接使用官方插件即可。
第 2 步:讓我們創(chuàng )建一個(gè)新任務(wù)。
你可以隨意填寫(xiě)。
然后點(diǎn)擊:采集器設置
根據需要填寫(xiě)這些內容。
然后設置其他三個(gè),比較簡(jiǎn)單。在此不再贅述。

第 3 步:讓我們點(diǎn)擊發(fā)布設置。
按選擇,然后選擇綁定。
這時(shí)候會(huì )報錯。由于PBOOCMS不是系統已知的CMS,所以需要添加:@pboot
下面的插件會(huì )顯示我們自己創(chuàng )建安裝的插件。選擇您使用的那個(gè)。如果我選擇從云平臺下載的pboot示例。
根據需要填寫(xiě)相關(guān)選項。
這時(shí)我們會(huì )發(fā)現,在分類(lèi)欄目中,我們只能看到三個(gè)欄目:新聞中心、公司新聞、行業(yè)新聞。
這也是我們今天要講的重點(diǎn)。
正如我們剛才所說(shuō),這是要記住的事情。這實(shí)際上是發(fā)布時(shí)調用的 PHP 文件。具體路徑為: 在你的優(yōu)采云
采集
網(wǎng)站的根目錄下,找到這個(gè)文件夾:
\\plugin\\release\\cms
可以看到,有兩個(gè)與剛才APP名稱(chēng)同名的PHP文件。你使用哪個(gè)插件對應修改哪個(gè)PHP文件。
我用的是官方的PbootDemoSkycaiji,我們打開(kāi)這個(gè)PHP文件。
在醉酒的底部我們看到
public?function?param_option_category(){
<p>

$catsDb=$this->db()->table('__CONTENT_SORT__')->where("contenttpl='news.html'")->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}</p>
它指定了一個(gè)news.html,如果你改成:case.html,你會(huì )在優(yōu)采云
的后臺看到publication classification變成了一個(gè)case欄。因此,如果我們要顯示所有的列,我們可以這樣修改。
public?function?param_option_category(){
$catsDb=$this->db()->table('__CONTENT_SORT__')->limit(100)->select();//文章分類(lèi)
$catList=array();
foreach?($catsDb?as?$cat){
$catList[$cat['id']]=$cat['name'];
}
return?$catList;
}
然后回到發(fā)布后臺,就可以看到了。列出所有列。然后正常采集
和釋放。
解決方案:Windows平臺實(shí)現Unity下窗體|攝像頭|屏幕采集并推送至RTMP服務(wù)器
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 156 次瀏覽 ? 2022-11-19 07:31
技術(shù)背景
隨著(zhù)Unity3D的應用范圍越來(lái)越廣,越來(lái)越多的行業(yè)開(kāi)始基于Unity3D開(kāi)發(fā)產(chǎn)品,如傳統行業(yè)的虛擬仿真教育、航空工業(yè)、室內設計、城市規劃、工業(yè)仿真等領(lǐng)域。
基于此,許多開(kāi)發(fā)者苦于 Unity 環(huán)境中缺乏低延遲的推拉流解決方案。幾年前,我們在Unity環(huán)境下推出了一款跨平臺的低延遲RTMP|RTSP直播播放器,解決了很多問(wèn)題。延遲關(guān)鍵的使用場(chǎng)景。
隨著(zhù)時(shí)間的推移,越來(lái)越多的開(kāi)發(fā)者聯(lián)系我們,希望我們能夠在Unity環(huán)境下推出RTMP推送模塊,從Unity中獲取實(shí)時(shí)數據,實(shí)現延遲更低、效率更高的數據傳輸和推送?;诖?,我們發(fā)布了Unity環(huán)境下的RTMP推送模塊。
本文以Windows平臺為例。數據來(lái)源為Unity窗口、攝像頭或整屏、編碼傳輸模塊、或調用大牛直播SDK(官方)的原生接口。簡(jiǎn)單的界面是一個(gè)預覽:
技術(shù)實(shí)現 1. 基本初始化
private bool InitSDK()
{
if (!is_pusher_sdk_init_)
{
// 設置日志路徑(請確保目錄存在)
String log_path = "D:\\pulisherlog";
NTSmartLog.NT_SL_SetPath(log_path);
UInt32 isInited = NTSmartPublisherSDK.NT_PB_Init(0, IntPtr.Zero);
if (isInited != 0)
{
Debug.Log("調用NT_PB_Init失敗..");
return false;
}
is_pusher_sdk_init_ = true;
}
return true;
}
2.調用Open()接口獲取推送實(shí)例
public bool OpenPublisherHandle(uint video_option, uint audio_option)
{
if (publisher_handle_ != IntPtr.Zero)
{
return true;
}
publisher_handle_count_ = 0;
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_Open(out publisher_handle_,
video_option, audio_option, 0, IntPtr.Zero))
{
return false;
}
if (publisher_handle_ != IntPtr.Zero)
{
pb_event_call_back_ = new NT_PB_SDKEventCallBack(PbEventCallBack);
NTSmartPublisherSDK.NT_PB_SetEventCallBack(publisher_handle_, IntPtr.Zero, pb_event_call_back_);
return true;
}
else
{
return false;
}
}
3.初始化參數配置
這里需要注意的是,如果要采集unity窗口,需要設置圖層模式,先填充一層RGBA黑色背景,再添加一層用于疊加外部數據。
private void SetCommonOptionToPublisherSDK()
{
if (!IsPublisherHandleAvailable())
{
Debug.Log("SetCommonOptionToPublisherSDK, publisher handle with null..");
return;
}
NTSmartPublisherSDK.NT_PB_ClearLayersConfig(publisher_handle_, 0,
0, IntPtr.Zero);
if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_LAYER)
{
// 第0層填充RGBA矩形, 目的是保證幀率, 顏色就填充全黑
int red = 0;
int green = 0;
int blue = 0;
int alpha = 255;
NT_PB_RGBARectangleLayerConfig rgba_layer_c0 = new NT_PB_RGBARectangleLayerConfig();
rgba_layer_c0.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE;
rgba_layer_c0.base_.index_ = 0;
rgba_layer_c0.base_.enable_ = 1;
rgba_layer_c0.base_.region_.x_ = 0;
rgba_layer_c0.base_.region_.y_ = 0;
rgba_layer_c0.base_.region_.width_ = video_width_;
rgba_layer_c0.base_.region_.height_ = video_height_;
rgba_layer_c0.base_.offset_ = Marshal.OffsetOf(rgba_layer_c0.GetType(), "base_").ToInt32();
rgba_layer_c0.base_.cb_size_ = (uint)Marshal.SizeOf(rgba_layer_c0);
rgba_layer_c0.red_ = System.BitConverter.GetBytes(red)[0];
rgba_layer_c0.green_ = System.BitConverter.GetBytes(green)[0];
rgba_layer_c0.blue_ = System.BitConverter.GetBytes(blue)[0];
rgba_layer_c0.alpha_ = System.BitConverter.GetBytes(alpha)[0];
IntPtr rgba_conf = Marshal.AllocHGlobal(Marshal.SizeOf(rgba_layer_c0));
Marshal.StructureToPtr(rgba_layer_c0, rgba_conf, true);
UInt32 rgba_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
rgba_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE,
0, IntPtr.Zero);
Marshal.FreeHGlobal(rgba_conf);
NT_PB_ExternalVideoFrameLayerConfig external_layer_c1 = new NT_PB_ExternalVideoFrameLayerConfig();
external_layer_c1.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME;
external_layer_c1.base_.index_ = 1;
external_layer_c1.base_.enable_ = 1;
external_layer_c1.base_.region_.x_ = 0;
external_layer_c1.base_.region_.y_ = 0;
external_layer_c1.base_.region_.width_ = video_width_;
external_layer_c1.base_.region_.height_ = video_height_;
external_layer_c1.base_.offset_ = Marshal.OffsetOf(external_layer_c1.GetType(), "base_").ToInt32();
external_layer_c1.base_.cb_size_ = (uint)Marshal.SizeOf(external_layer_c1);
IntPtr external_layer_conf = Marshal.AllocHGlobal(Marshal.SizeOf(external_layer_c1));
Marshal.StructureToPtr(external_layer_c1, external_layer_conf, true);
UInt32 external_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
external_layer_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME,
0, IntPtr.Zero);
Marshal.FreeHGlobal(external_layer_conf);
}
<p>
else if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_CAMERA)
{
CameraInfo camera = cameras_[cur_sel_camera_index_];
NT_PB_VideoCaptureCapability cap = camera.capabilities_[cur_sel_camera_resolutions_index_];
SetVideoCaptureDeviceBaseParameter(camera.id_.ToString(), (UInt32)cap.width_, (UInt32)cap.height_);
}
SetFrameRate((UInt32)CalBitRate(edit_key_frame_, video_width_, video_height_));
Int32 type = 0; //軟編碼
Int32 encoder_id = 1;
UInt32 codec_id = (UInt32)NTCommonMediaDefine.NT_MEDIA_CODEC_ID.NT_MEDIA_CODEC_ID_H264;
Int32 param1 = 0;
SetVideoEncoder(type, encoder_id, codec_id, param1);
SetVideoQualityV2(CalVideoQuality(video_width_, video_height_, is_h264_encoder));
SetVideoMaxBitRate((CalMaxKBitRate(edit_key_frame_, video_width_, video_height_, false)));
SetVideoKeyFrameInterval((edit_key_frame_));
if (is_h264_encoder)
{
SetVideoEncoderProfile(1);
}
SetVideoEncoderSpeed(CalVideoEncoderSpeed(video_width_, video_height_, is_h264_encoder));
// 音頻相關(guān)設置
SetAuidoInputDeviceId(0);
SetPublisherAudioCodecType(1);
SetPublisherMute(is_mute);
SetEchoCancellation(0, 0);
SetNoiseSuppression(0);
SetAGC(0);
SetVAD(0);
SetInputAudioVolume(Convert.ToSingle(edit_audio_input_volume_));
}
</p>
4.數據采集
攝像頭和屏幕數據采集依然調用原生SDK接口,本文不再贅述。如果需要采集Unity形式的數據,可以參考如下代碼:
if ( texture_ == null || video_width_ != Screen.width || video_height_ != Screen.height)
{
Debug.Log("OnPostRender screen changed++ scr_width: " + Screen.width + " scr_height: " + Screen.height);
if (screen_image_ != IntPtr.Zero)
{
Marshal.FreeHGlobal(screen_image_);
screen_image_ = IntPtr.Zero;
}
if (texture_ != null)
{
UnityEngine.Object.Destroy(texture_);
texture_ = null;
}
video_width_ = Screen.width;
video_height_ = Screen.height;
texture_ = new Texture2D(video_width_, video_height_, TextureFormat.BGRA32, false);
screen_image_ = Marshal.AllocHGlobal(video_width_ * 4 * video_height_);
Debug.Log("OnPostRender screen changed--");
return;
}
texture_.ReadPixels(new Rect(0, 0, video_width_, video_height_), 0, 0, false);
texture_.Apply();
從紋理中,通過(guò)調用 GetRawTextureData() 獲取原創(chuàng )數據。
5、數據對接
獲取原創(chuàng )數據后,通過(guò)調用系統封裝的OnPostRGBAData()接口將數據傳遞給SDK層。
6.本地數據預覽
public bool StartPreview()
{
if(CheckPublisherHandleAvailable() == false)
return false;
video_preview_image_callback_ = new NT_PB_SDKVideoPreviewImageCallBack(SDKVideoPreviewImageCallBack);
NTSmartPublisherSDK.NT_PB_SetVideoPreviewImageCallBack(publisher_handle_, (int)NTSmartPublisherDefine.NT_PB_E_IMAGE_FORMAT.NT_PB_E_IMAGE_FORMAT_RGB32, IntPtr.Zero, video_preview_image_callback_);
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPreview(publisher_handle_, 0, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
return false;
}
publisher_handle_count_++;
is_previewing_ = true;
return true;
}
public void StopPreview()
{
if (is_previewing_ == false) return;
is_previewing_ = false;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPreview(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
設置好預覽后,處理預覽的數據回調
//預覽數據回調
public void SDKVideoPreviewImageCallBack(IntPtr handle, IntPtr user_data, IntPtr image)
{
NT_PB_Image pb_image = (NT_PB_Image)Marshal.PtrToStructure(image, typeof(NT_PB_Image));
NT_VideoFrame pVideoFrame = new NT_VideoFrame();
pVideoFrame.width_ = pb_image.width_;
pVideoFrame.height_ = pb_image.height_;
<p>
pVideoFrame.stride_ = pb_image.stride_[0];
Int32 argb_size = pb_image.stride_[0] * pb_image.height_;
pVideoFrame.plane_data_ = new byte[argb_size];
if (argb_size > 0)
{
Marshal.Copy(pb_image.plane_[0],pVideoFrame.plane_data_,0, argb_size);
}
{
cur_image_ = pVideoFrame;
}
}
</p>
7.相關(guān)事件回調處理
private void PbEventCallBack(IntPtr handle, IntPtr user_data,
UInt32 event_id,
Int64 param1,
Int64 param2,
UInt64 param3,
UInt64 param4,
[MarshalAs(UnmanagedType.LPStr)] String param5,
[MarshalAs(UnmanagedType.LPStr)] String param6,
IntPtr param7)
{
String event_log = "";
switch (event_id)
{
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTING:
event_log = "連接中";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTION_FAILED:
event_log = "連接失敗";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTED:
event_log = "已連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_DISCONNECTED:
event_log = "斷開(kāi)連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
default:
break;
}
if(OnLogEventMsg != null) OnLogEventMsg.Invoke(event_id, event_log);
}
8.開(kāi)始推送,停止推送
public bool StartPublisher(String url)
{
if (CheckPublisherHandleAvailable() == false) return false;
if (publisher_handle_ == IntPtr.Zero)
{
return false;
}
if (!String.IsNullOrEmpty(url))
{
NTSmartPublisherSDK.NT_PB_SetURL(publisher_handle_, url, IntPtr.Zero);
}
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPublisher(publisher_handle_, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
return false;
}
publisher_handle_count_++;
is_publishing_ = true;
return true;
}
public void StopPublisher()
{
if (is_publishing_ == false) return;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPublisher(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
}
9.關(guān)閉實(shí)例
public void Close()
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
總結
經(jīng)測試,在Unity環(huán)境下,通過(guò)高效數據采集,編碼推送,配合SmartPlayer播放,整體延遲可以控制在毫秒級,適合大部分Unity對延遲和穩定性的要求環(huán)境惡劣的場(chǎng)景。
解決方案:利用ROS采集VLP-16激光雷達數據
啟動(dòng)VLP-16激光雷達,想用ROS采集雷達數據,按照現有的教程總有一些小問(wèn)題,現在分享自己成功采集的數據,希望對那些剛進(jìn)坑的人有所幫助。
我使用 Ubuntu 16.04+ 動(dòng)力學(xué)系統
1. 安裝驅動(dòng)程序
sudo apt-get install ros-kinetic-velodyne
2. 配置網(wǎng)絡(luò )以連接到激光雷達(無(wú)需關(guān)閉無(wú)線(xiàn)):
修改 IPv4:在有線(xiàn)網(wǎng)絡(luò )中
更改為手動(dòng)
IP 地址為 192.168.1.77,
子網(wǎng)掩碼為 255.255.255.0,網(wǎng)關(guān)為 192.168.1.1。然后連接激光雷達,
打開(kāi)瀏覽器輸入192.168.1.201,查看激光雷達配置文件。
每次連接雷達時(shí),輸入以下兩個(gè)命令:
sudo ifconfig enp2s0 192.168.1.123
sudo 路由添加 192.168.1.201 enp2s0
3. 創(chuàng )建 ROS 項目:
MKDIR -P catkin_velodyne/SRC
光盤(pán)catkin_velodyne/SRC
git 克隆
光盤(pán)..
Rosdep install --from-path src --ignore-src --rosdistro kinetic -y
catkin_make
Source devel/setup.bash
4.將Velodyne XML文件轉換為ROS節點(diǎn)的YAML文件,VLP-16.xml據說(shuō)在免費的USB閃存盤(pán)中,反正沒(méi)找到
我從互聯(lián)網(wǎng)上下載了一個(gè)。請記住將下面的地址更改為您的 VLP-16 .xml文件的地址。
rosrun velodyne_pointcloud gen_calibration.py ~/VLP-16.xml (更改為你自己保存的目錄)。
5. 加載:
roslaunch velodyne_pointcloud VLP16_points.launch calibration:=~/VLP-16.yaml (更改為你自己保存的目錄)。
6、點(diǎn)云圖實(shí)時(shí)展示:
Rosrun Rviz Rviz -F velodyne
然后按主題添加
rviz 添加 PointCloud2,并在主題中輸入 /velodyne_points,這樣得到的 3D 點(diǎn)云圖就可以實(shí)時(shí)展示。
7. 記錄數據:
我看到的教程是用 rosbagrecord-oout/velodyne_points 命令獲取 /velodyne_points 主題的數據,但是當我去分析保存的數據時(shí),發(fā)現里面的雷達數據被處理了,反正我根本無(wú)法解讀。我想獲取雷達原創(chuàng )UDP報文中的信息來(lái)生成距離和強度圖像,所以我保存了/velodyne_packets這個(gè)主題的數據,保存的數據是收錄UDP的正文,每76個(gè)UDP數據包(每周掃描360度)都有一個(gè)時(shí)間戳,然后根據手冊就可以從數據中獲取距離和強度信息。
羅斯巴格記錄 -O 文件名 /velodyne_packets 查看全部
解決方案:Windows平臺實(shí)現Unity下窗體|攝像頭|屏幕采集并推送至RTMP服務(wù)器
技術(shù)背景
隨著(zhù)Unity3D的應用范圍越來(lái)越廣,越來(lái)越多的行業(yè)開(kāi)始基于Unity3D開(kāi)發(fā)產(chǎn)品,如傳統行業(yè)的虛擬仿真教育、航空工業(yè)、室內設計、城市規劃、工業(yè)仿真等領(lǐng)域。
基于此,許多開(kāi)發(fā)者苦于 Unity 環(huán)境中缺乏低延遲的推拉流解決方案。幾年前,我們在Unity環(huán)境下推出了一款跨平臺的低延遲RTMP|RTSP直播播放器,解決了很多問(wèn)題。延遲關(guān)鍵的使用場(chǎng)景。
隨著(zhù)時(shí)間的推移,越來(lái)越多的開(kāi)發(fā)者聯(lián)系我們,希望我們能夠在Unity環(huán)境下推出RTMP推送模塊,從Unity中獲取實(shí)時(shí)數據,實(shí)現延遲更低、效率更高的數據傳輸和推送?;诖?,我們發(fā)布了Unity環(huán)境下的RTMP推送模塊。
本文以Windows平臺為例。數據來(lái)源為Unity窗口、攝像頭或整屏、編碼傳輸模塊、或調用大牛直播SDK(官方)的原生接口。簡(jiǎn)單的界面是一個(gè)預覽:
技術(shù)實(shí)現 1. 基本初始化
private bool InitSDK()
{
if (!is_pusher_sdk_init_)
{
// 設置日志路徑(請確保目錄存在)
String log_path = "D:\\pulisherlog";
NTSmartLog.NT_SL_SetPath(log_path);
UInt32 isInited = NTSmartPublisherSDK.NT_PB_Init(0, IntPtr.Zero);
if (isInited != 0)
{
Debug.Log("調用NT_PB_Init失敗..");
return false;
}
is_pusher_sdk_init_ = true;
}
return true;
}
2.調用Open()接口獲取推送實(shí)例
public bool OpenPublisherHandle(uint video_option, uint audio_option)
{
if (publisher_handle_ != IntPtr.Zero)
{
return true;
}
publisher_handle_count_ = 0;
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_Open(out publisher_handle_,
video_option, audio_option, 0, IntPtr.Zero))
{
return false;
}
if (publisher_handle_ != IntPtr.Zero)
{
pb_event_call_back_ = new NT_PB_SDKEventCallBack(PbEventCallBack);
NTSmartPublisherSDK.NT_PB_SetEventCallBack(publisher_handle_, IntPtr.Zero, pb_event_call_back_);
return true;
}
else
{
return false;
}
}
3.初始化參數配置
這里需要注意的是,如果要采集unity窗口,需要設置圖層模式,先填充一層RGBA黑色背景,再添加一層用于疊加外部數據。
private void SetCommonOptionToPublisherSDK()
{
if (!IsPublisherHandleAvailable())
{
Debug.Log("SetCommonOptionToPublisherSDK, publisher handle with null..");
return;
}
NTSmartPublisherSDK.NT_PB_ClearLayersConfig(publisher_handle_, 0,
0, IntPtr.Zero);
if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_LAYER)
{
// 第0層填充RGBA矩形, 目的是保證幀率, 顏色就填充全黑
int red = 0;
int green = 0;
int blue = 0;
int alpha = 255;
NT_PB_RGBARectangleLayerConfig rgba_layer_c0 = new NT_PB_RGBARectangleLayerConfig();
rgba_layer_c0.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE;
rgba_layer_c0.base_.index_ = 0;
rgba_layer_c0.base_.enable_ = 1;
rgba_layer_c0.base_.region_.x_ = 0;
rgba_layer_c0.base_.region_.y_ = 0;
rgba_layer_c0.base_.region_.width_ = video_width_;
rgba_layer_c0.base_.region_.height_ = video_height_;
rgba_layer_c0.base_.offset_ = Marshal.OffsetOf(rgba_layer_c0.GetType(), "base_").ToInt32();
rgba_layer_c0.base_.cb_size_ = (uint)Marshal.SizeOf(rgba_layer_c0);
rgba_layer_c0.red_ = System.BitConverter.GetBytes(red)[0];
rgba_layer_c0.green_ = System.BitConverter.GetBytes(green)[0];
rgba_layer_c0.blue_ = System.BitConverter.GetBytes(blue)[0];
rgba_layer_c0.alpha_ = System.BitConverter.GetBytes(alpha)[0];
IntPtr rgba_conf = Marshal.AllocHGlobal(Marshal.SizeOf(rgba_layer_c0));
Marshal.StructureToPtr(rgba_layer_c0, rgba_conf, true);
UInt32 rgba_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
rgba_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_RGBA_RECTANGLE,
0, IntPtr.Zero);
Marshal.FreeHGlobal(rgba_conf);
NT_PB_ExternalVideoFrameLayerConfig external_layer_c1 = new NT_PB_ExternalVideoFrameLayerConfig();
external_layer_c1.base_.type_ = (Int32)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME;
external_layer_c1.base_.index_ = 1;
external_layer_c1.base_.enable_ = 1;
external_layer_c1.base_.region_.x_ = 0;
external_layer_c1.base_.region_.y_ = 0;
external_layer_c1.base_.region_.width_ = video_width_;
external_layer_c1.base_.region_.height_ = video_height_;
external_layer_c1.base_.offset_ = Marshal.OffsetOf(external_layer_c1.GetType(), "base_").ToInt32();
external_layer_c1.base_.cb_size_ = (uint)Marshal.SizeOf(external_layer_c1);
IntPtr external_layer_conf = Marshal.AllocHGlobal(Marshal.SizeOf(external_layer_c1));
Marshal.StructureToPtr(external_layer_c1, external_layer_conf, true);
UInt32 external_r = NTSmartPublisherSDK.NT_PB_AddLayerConfig(publisher_handle_, 0,
external_layer_conf, (int)NTSmartPublisherDefine.NT_PB_E_LAYER_TYPE.NT_PB_E_LAYER_TYPE_EXTERNAL_VIDEO_FRAME,
0, IntPtr.Zero);
Marshal.FreeHGlobal(external_layer_conf);
}
<p>

else if (video_option == NTSmartPublisherDefine.NT_PB_E_VIDEO_OPTION.NT_PB_E_VIDEO_OPTION_CAMERA)
{
CameraInfo camera = cameras_[cur_sel_camera_index_];
NT_PB_VideoCaptureCapability cap = camera.capabilities_[cur_sel_camera_resolutions_index_];
SetVideoCaptureDeviceBaseParameter(camera.id_.ToString(), (UInt32)cap.width_, (UInt32)cap.height_);
}
SetFrameRate((UInt32)CalBitRate(edit_key_frame_, video_width_, video_height_));
Int32 type = 0; //軟編碼
Int32 encoder_id = 1;
UInt32 codec_id = (UInt32)NTCommonMediaDefine.NT_MEDIA_CODEC_ID.NT_MEDIA_CODEC_ID_H264;
Int32 param1 = 0;
SetVideoEncoder(type, encoder_id, codec_id, param1);
SetVideoQualityV2(CalVideoQuality(video_width_, video_height_, is_h264_encoder));
SetVideoMaxBitRate((CalMaxKBitRate(edit_key_frame_, video_width_, video_height_, false)));
SetVideoKeyFrameInterval((edit_key_frame_));
if (is_h264_encoder)
{
SetVideoEncoderProfile(1);
}
SetVideoEncoderSpeed(CalVideoEncoderSpeed(video_width_, video_height_, is_h264_encoder));
// 音頻相關(guān)設置
SetAuidoInputDeviceId(0);
SetPublisherAudioCodecType(1);
SetPublisherMute(is_mute);
SetEchoCancellation(0, 0);
SetNoiseSuppression(0);
SetAGC(0);
SetVAD(0);
SetInputAudioVolume(Convert.ToSingle(edit_audio_input_volume_));
}
</p>
4.數據采集
攝像頭和屏幕數據采集依然調用原生SDK接口,本文不再贅述。如果需要采集Unity形式的數據,可以參考如下代碼:
if ( texture_ == null || video_width_ != Screen.width || video_height_ != Screen.height)
{
Debug.Log("OnPostRender screen changed++ scr_width: " + Screen.width + " scr_height: " + Screen.height);
if (screen_image_ != IntPtr.Zero)
{
Marshal.FreeHGlobal(screen_image_);
screen_image_ = IntPtr.Zero;
}
if (texture_ != null)
{
UnityEngine.Object.Destroy(texture_);
texture_ = null;
}
video_width_ = Screen.width;
video_height_ = Screen.height;
texture_ = new Texture2D(video_width_, video_height_, TextureFormat.BGRA32, false);
screen_image_ = Marshal.AllocHGlobal(video_width_ * 4 * video_height_);
Debug.Log("OnPostRender screen changed--");
return;
}
texture_.ReadPixels(new Rect(0, 0, video_width_, video_height_), 0, 0, false);
texture_.Apply();
從紋理中,通過(guò)調用 GetRawTextureData() 獲取原創(chuàng )數據。
5、數據對接
獲取原創(chuàng )數據后,通過(guò)調用系統封裝的OnPostRGBAData()接口將數據傳遞給SDK層。
6.本地數據預覽
public bool StartPreview()
{
if(CheckPublisherHandleAvailable() == false)
return false;
video_preview_image_callback_ = new NT_PB_SDKVideoPreviewImageCallBack(SDKVideoPreviewImageCallBack);
NTSmartPublisherSDK.NT_PB_SetVideoPreviewImageCallBack(publisher_handle_, (int)NTSmartPublisherDefine.NT_PB_E_IMAGE_FORMAT.NT_PB_E_IMAGE_FORMAT_RGB32, IntPtr.Zero, video_preview_image_callback_);
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPreview(publisher_handle_, 0, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
return false;
}
publisher_handle_count_++;
is_previewing_ = true;
return true;
}
public void StopPreview()
{
if (is_previewing_ == false) return;
is_previewing_ = false;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPreview(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
設置好預覽后,處理預覽的數據回調
//預覽數據回調
public void SDKVideoPreviewImageCallBack(IntPtr handle, IntPtr user_data, IntPtr image)
{
NT_PB_Image pb_image = (NT_PB_Image)Marshal.PtrToStructure(image, typeof(NT_PB_Image));
NT_VideoFrame pVideoFrame = new NT_VideoFrame();
pVideoFrame.width_ = pb_image.width_;
pVideoFrame.height_ = pb_image.height_;
<p>

pVideoFrame.stride_ = pb_image.stride_[0];
Int32 argb_size = pb_image.stride_[0] * pb_image.height_;
pVideoFrame.plane_data_ = new byte[argb_size];
if (argb_size > 0)
{
Marshal.Copy(pb_image.plane_[0],pVideoFrame.plane_data_,0, argb_size);
}
{
cur_image_ = pVideoFrame;
}
}
</p>
7.相關(guān)事件回調處理
private void PbEventCallBack(IntPtr handle, IntPtr user_data,
UInt32 event_id,
Int64 param1,
Int64 param2,
UInt64 param3,
UInt64 param4,
[MarshalAs(UnmanagedType.LPStr)] String param5,
[MarshalAs(UnmanagedType.LPStr)] String param6,
IntPtr param7)
{
String event_log = "";
switch (event_id)
{
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTING:
event_log = "連接中";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTION_FAILED:
event_log = "連接失敗";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_CONNECTED:
event_log = "已連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
case (uint)NTSmartPublisherDefine.NT_PB_E_EVENT_ID.NT_PB_E_EVENT_ID_DISCONNECTED:
event_log = "斷開(kāi)連接";
if (!String.IsNullOrEmpty(param5))
{
event_log = event_log + " url:" + param5;
}
break;
default:
break;
}
if(OnLogEventMsg != null) OnLogEventMsg.Invoke(event_id, event_log);
}
8.開(kāi)始推送,停止推送
public bool StartPublisher(String url)
{
if (CheckPublisherHandleAvailable() == false) return false;
if (publisher_handle_ == IntPtr.Zero)
{
return false;
}
if (!String.IsNullOrEmpty(url))
{
NTSmartPublisherSDK.NT_PB_SetURL(publisher_handle_, url, IntPtr.Zero);
}
if (NTBaseCodeDefine.NT_ERC_OK != NTSmartPublisherSDK.NT_PB_StartPublisher(publisher_handle_, IntPtr.Zero))
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
return false;
}
publisher_handle_count_++;
is_publishing_ = true;
return true;
}
public void StopPublisher()
{
if (is_publishing_ == false) return;
publisher_handle_count_--;
NTSmartPublisherSDK.NT_PB_StopPublisher(publisher_handle_);
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
is_publishing_ = false;
}
9.關(guān)閉實(shí)例
public void Close()
{
if (0 == publisher_handle_count_)
{
NTSmartPublisherSDK.NT_PB_Close(publisher_handle_);
publisher_handle_ = IntPtr.Zero;
}
}
總結
經(jīng)測試,在Unity環(huán)境下,通過(guò)高效數據采集,編碼推送,配合SmartPlayer播放,整體延遲可以控制在毫秒級,適合大部分Unity對延遲和穩定性的要求環(huán)境惡劣的場(chǎng)景。
解決方案:利用ROS采集VLP-16激光雷達數據
啟動(dòng)VLP-16激光雷達,想用ROS采集雷達數據,按照現有的教程總有一些小問(wèn)題,現在分享自己成功采集的數據,希望對那些剛進(jìn)坑的人有所幫助。
我使用 Ubuntu 16.04+ 動(dòng)力學(xué)系統
1. 安裝驅動(dòng)程序
sudo apt-get install ros-kinetic-velodyne
2. 配置網(wǎng)絡(luò )以連接到激光雷達(無(wú)需關(guān)閉無(wú)線(xiàn)):
修改 IPv4:在有線(xiàn)網(wǎng)絡(luò )中
更改為手動(dòng)
IP 地址為 192.168.1.77,
子網(wǎng)掩碼為 255.255.255.0,網(wǎng)關(guān)為 192.168.1.1。然后連接激光雷達,
打開(kāi)瀏覽器輸入192.168.1.201,查看激光雷達配置文件。
每次連接雷達時(shí),輸入以下兩個(gè)命令:

sudo ifconfig enp2s0 192.168.1.123
sudo 路由添加 192.168.1.201 enp2s0
3. 創(chuàng )建 ROS 項目:
MKDIR -P catkin_velodyne/SRC
光盤(pán)catkin_velodyne/SRC
git 克隆
光盤(pán)..
Rosdep install --from-path src --ignore-src --rosdistro kinetic -y
catkin_make
Source devel/setup.bash
4.將Velodyne XML文件轉換為ROS節點(diǎn)的YAML文件,VLP-16.xml據說(shuō)在免費的USB閃存盤(pán)中,反正沒(méi)找到

我從互聯(lián)網(wǎng)上下載了一個(gè)。請記住將下面的地址更改為您的 VLP-16 .xml文件的地址。
rosrun velodyne_pointcloud gen_calibration.py ~/VLP-16.xml (更改為你自己保存的目錄)。
5. 加載:
roslaunch velodyne_pointcloud VLP16_points.launch calibration:=~/VLP-16.yaml (更改為你自己保存的目錄)。
6、點(diǎn)云圖實(shí)時(shí)展示:
Rosrun Rviz Rviz -F velodyne
然后按主題添加
rviz 添加 PointCloud2,并在主題中輸入 /velodyne_points,這樣得到的 3D 點(diǎn)云圖就可以實(shí)時(shí)展示。
7. 記錄數據:
我看到的教程是用 rosbagrecord-oout/velodyne_points 命令獲取 /velodyne_points 主題的數據,但是當我去分析保存的數據時(shí),發(fā)現里面的雷達數據被處理了,反正我根本無(wú)法解讀。我想獲取雷達原創(chuàng )UDP報文中的信息來(lái)生成距離和強度圖像,所以我保存了/velodyne_packets這個(gè)主題的數據,保存的數據是收錄UDP的正文,每76個(gè)UDP數據包(每周掃描360度)都有一個(gè)時(shí)間戳,然后根據手冊就可以從數據中獲取距離和強度信息。
羅斯巴格記錄 -O 文件名 /velodyne_packets
最新版:jquery基礎快速教程和“jquery之本”框架教程(免費版)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 87 次瀏覽 ? 2022-11-18 10:28
文章采集調用ie,然后經(jīng)過(guò)前端轉換輸出html加js讓用戶(hù)點(diǎn)擊頁(yè)面,點(diǎn)擊后執行相應的動(dòng)作,js代碼通過(guò)后端返回頁(yè)面并獲取交互數據,進(jìn)行展示,整個(gè)過(guò)程不涉及到網(wǎng)頁(yè)的加載,即flash,難度稍微低些,另外,在實(shí)現這個(gè)前端功能的時(shí)候,可以用jquery框架,總的來(lái)說(shuō)還是要具備一定的前端功底以及網(wǎng)絡(luò )編程的基礎,如果是小白也沒(méi)有關(guān)系,現在也有免費開(kāi)源的jquery框架,直接通過(guò)mvc的模式進(jìn)行開(kāi)發(fā)。
開(kāi)發(fā)效率還是挺高的,最新版本的一些工具提供了大量的mvc模式開(kāi)發(fā)示例視頻教程,供大家學(xué)習交流。首頁(yè):jquery基礎快速教程和“jquery之本”框架教程(免費版)“jquery之本”框架教程(付費版)下載:鏈接密碼:n50b具體參見(jiàn):jquery教程_jquery框架教程精講_android開(kāi)發(fā)_視頻教程_免費教程大全當然在學(xué)習過(guò)程中,有不懂的問(wèn)題可以關(guān)注我的公眾號回復:jquery,獲取相應的教程視頻以及后端js開(kāi)發(fā)教程!。
寫(xiě)幾個(gè)頁(yè)面,就熟練了,
已經(jīng)給jquery提交了,他們回答的還挺詳細的。 查看全部
最新版:jquery基礎快速教程和“jquery之本”框架教程(免費版)
文章采集調用ie,然后經(jīng)過(guò)前端轉換輸出html加js讓用戶(hù)點(diǎn)擊頁(yè)面,點(diǎn)擊后執行相應的動(dòng)作,js代碼通過(guò)后端返回頁(yè)面并獲取交互數據,進(jìn)行展示,整個(gè)過(guò)程不涉及到網(wǎng)頁(yè)的加載,即flash,難度稍微低些,另外,在實(shí)現這個(gè)前端功能的時(shí)候,可以用jquery框架,總的來(lái)說(shuō)還是要具備一定的前端功底以及網(wǎng)絡(luò )編程的基礎,如果是小白也沒(méi)有關(guān)系,現在也有免費開(kāi)源的jquery框架,直接通過(guò)mvc的模式進(jìn)行開(kāi)發(fā)。

開(kāi)發(fā)效率還是挺高的,最新版本的一些工具提供了大量的mvc模式開(kāi)發(fā)示例視頻教程,供大家學(xué)習交流。首頁(yè):jquery基礎快速教程和“jquery之本”框架教程(免費版)“jquery之本”框架教程(付費版)下載:鏈接密碼:n50b具體參見(jiàn):jquery教程_jquery框架教程精講_android開(kāi)發(fā)_視頻教程_免費教程大全當然在學(xué)習過(guò)程中,有不懂的問(wèn)題可以關(guān)注我的公眾號回復:jquery,獲取相應的教程視頻以及后端js開(kāi)發(fā)教程!。

寫(xiě)幾個(gè)頁(yè)面,就熟練了,
已經(jīng)給jquery提交了,他們回答的還挺詳細的。
教程:dedecms織夢(mèng)TAG標簽調用代碼
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-11-17 02:51
標簽標簽
是一種自己定義的關(guān)鍵詞,比分類(lèi)更準確、更具體,可以概括文章主要內容,合理使用TAG標簽,可以讓你發(fā)表的文章更容易檢索。
很多網(wǎng)站首頁(yè)、列表頁(yè)和文章頁(yè)都用超鏈接調用TAG關(guān)鍵詞,有利于蜘蛛搜索和抓取,也有利于用戶(hù)點(diǎn)擊,那么如何在織夢(mèng)dedecms系統的網(wǎng)站上實(shí)現此功能呢?對此,做網(wǎng)站吧,整理出以下方法供大家使用:
1、TaT ?B 6g 標簽 o V % 的語(yǔ)法解釋
基本語(yǔ)法:
{dede:tag row='30' sort='new' getall='0′}
c B 8 r///a/dedejq/[field:link/]'>[field:tag /]
{/dede:tag}
參數說(shuō)明:
row=K z 9 W k \ B * x '30' 呼叫號碼為 30
sort='new' 排序 月, 蘭特, 周
getall='0' 獲取當前內容頁(yè)面 TAG 標記的類(lèi)型 0,以及獲取所有 TAG 標記的類(lèi)型 1。
基礎模板字段:鏈接、標記
2. 最新的標簽標簽稱(chēng)為
{dede:tag row='30' sort='new'}[字段:突出顯示/]
?。╗字段:結果/])
{/dede:tag}
3.調用本月熱門(mén)標簽標簽
{dede:tag row='30' sort='month'}I d s d stp:///a/dedejq/[field:link/]'>[field:
tagname/]([field:result/])
{/dede:tag}
4. 隨機標簽調用
{deu } ^de:tag row='60' sort='rand'}
$ J | m W 5 F /a/dedejq/[field:link/]'>[field:highlight/]([field:result/])
{/dede:tag}
5. 采集熱 [# W 0 V N L n – 門(mén)標簽,轉換后刷新
模板代碼:
{dede:tag row='10' sort='month' }
, E y u mom/a/dedejq/[field:link/]'>[field:tagname/] &o : T # hlt;/a>
{/dede:tag}
^ e 8 {t language=“JavaScript”>
偏移量){
tag_a.className=“tag”+(rnd-offsc y 2 4et);
}
}
}/
/–>
CSS代碼:
.tag1 { color:h Z j j m G i + X#339900; font-weight:bold; }
.tag2 { color:#e65730; }
.tag3 { color:#00b9da; }
.tag4 { color:#FG 2 4 C +E3981; 7 5 ) T [ Jfont-weighW Z P 7 } G &t:bold; font-size:14px; }
6. 在頁(yè)面文章調用標簽標簽
{J w % = S y p 8 gdede:tag table='dede_search_keywords' sort='keyword' row='2′ ifd O b y F=“}
\ L \dedejq/[field:link/]' target=_i 7 * # _blank>[field:tag /]
{/dede:tag}
或
{dede:fie# n : 2 [ r XLD name='Keywords' runphp='yes' }
if(!empty(@me)){
$kws = 爆炸(' ',@me);
@me = “”;
foreach($kws as $k){
@me .= “O / x 4 # '/tag.php?/$k/'>$k ”;
}
@me= str_repla' $ F 0 }ce('+', ' ',trim(@me));
}
{/dede:field}
7. 列表頁(yè)調用 TAG 標簽的兩個(gè) b # k F w D 方法
dedecms列表中的默認值無(wú)法調用 tag\q v C; _ X 標簽。Do 網(wǎng)站 G * { r p i, 7 n 為您提供以下不同版本的標簽標簽調用 T D G A p A are you 方法:
?。?)、de, w \decms 5.7 調用方法
首先,找到 include\helpers\archive.helper.php 文件(注:有些朋友會(huì )有疑問(wèn),首頁(yè)和頻道,列表應該添加不同的調用,但我開(kāi)始用列表頁(yè)面測試,成功;添加 m \ b v q r 首頁(yè)后,測試也進(jìn)入了 D Y G R U Y T + D 功能顯示,所以我沒(méi)有繼續深入研究,另外,這個(gè)文件的內容發(fā)生了變化,在后臺文件是無(wú)法更改的,提示 _&0 7 是注入 sql,所以要在 ftp 中找到這個(gè)文件來(lái)更改 0。)
在底部添加:
函數; f G GetTags_list($aid)
{
全球$dsql;
$tags = “;
$query = “從'ma_taglisi v \ at'中選擇標簽,其中aid='$aid'”;
~ w T $dsql->Execute('tag',$query);
0 I 5 + 2 y a s whil' j % s ~ we($row = $dsql->GetArray('tag'))
{
$tags .= ($tags==“ ?“9 R.Q e #<^ ) \ n 6;a hreb E H f Q uf='“.urlencode($row['tag']).”' &gl f _t;Y ] R 5 L t # = G“.$row['tag'].”“ : ','.”O % V x b ^ .i P /tags.php?/“.urlencode($row['tag']).”' >“.$row['tag'].”“);
}
返回 $tau P % @ rgs;
}
那么Q I S + v b H k,加上:,這里列表需要調用標簽標簽
[字段:id 函數=GetTags_list(@me)/]
以完成。
?。?)、dedecms 5K T y W + C g j.6 版本 G \ G Y # |G本的調用方法
方法一:
只需在模板需要的地方添加以下代碼:
[字段:ID runphp=yes]
$tsql = new DedeSql(false);
$tags = “B F e –;
$tsql->SetQuery(“選擇 i.tag 從 dede_taglist t 左連接 dede_tagindex i on i.id=t.tid 其中 t.an / ;E Zid='@me'“);
$tsql-e ) ;>ExG V q @ecute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “”.$row['tag'].“ &k u blt;/a>”;
}
@me=$tags;
[/字段:id]
注意:此步驟無(wú)法在 dede 5.7 中實(shí)現。
方法2:
打開(kāi) dedecms根目錄 T k Y ~include/common.func.php,在底部的 “!k ?A b O?>“在以下代碼之前:
讓我們做網(wǎng)站:列表頁(yè)調用標簽的方法
函數列表標簽($aid)
{
$tsql = new DedeSql(false);
$tags = “;{ ( n : u X ' , m
$tsql->SetQuery(“Select i.tag FrM .o 9 Oom dt 7 ;2 j ] ^ede_taglist t left join dede_tagindex i on i.id=t.tid where t.aid='$aid'“);
$tsql->執行('t');
whi– x W s e – ale($row = $tsql->GetArray('t',MYSQL_ASSOC)){7 C \ j
$tags .= “D ( & 6lencode($row['tag']).” /'>“.$rowj 0 Y ? x v z o J['tag'].”";
}% W ?z F |_ = i
雷圖]U Y骨灰盒$tags;
}
{@ ? n i 2 0 , 5 4dede:field.id runphp=yes}
$tsql = new DedeSql(false);
$tags = “;
$tsql->SetQuery(“Select i.tag From ded\ } q |e_taglist t left join dede_tak f 4gindex i on i.id=t.tid where t.aid='@me'”);
$' 1 ~tsql->Execute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “e D Hhp?/”.urlencode($row['tag']).“' >”.$row['tag'].“”;
}
@me=$# A F ytags;
{/dede:field.id}
添加代碼 6 j't*$x 后,可以使用列表頁(yè):
{m s s C $dede:field.id function=“l(fā)isttag(@me)”/}
以調用標簽標簽。
方法三:
inc_functions.php 添加 :
函數列表標記($aid){
$tsql = new DedeSql(p ' w x 8 Q 3 s tfalse);
$tags = “;
$tsql->SetQuery(“Select i.tagname From xkzzz_tag_list t left join xkzzz_tu 4 t \ 0 { x gag_index i on i.id=t.tid where t.aid='$aid'”);
$tsql->執行('t');
while($row = $tsql->Getj [ x &Array('t'{ N f M K v S,MYSQL_AO r _ 0 |SSOC)){
$tags .= “s 1 j { ~ + !/tag.php?/”.urlencodeE # 6 [ z H 0 V Y($row['tagname']).“' >”.$rowu F G y A ,['tagname'].“”;
}
+ _ c j c 6 d 返回$tags;
}
然后添加 :,其中列表頁(yè)位于
[字段:ID 函數=“列表標記(@me)”/]
可以調出來(lái),但是這個(gè)方法也需要更改程序文件,看不懂代碼的朋友,慎用吧!
8. 首頁(yè)調用該方法文章 Tg j LAG 標簽
如果您網(wǎng)站使用 dedecms v5.7 可以使用以下標簽:
徑直
[field:id function=GetTags(@me)/]
可以調出,但不能調出g Y # k x s T O \沒(méi)有連接,為了添加標簽標簽的鏈接,還需要做到以下幾點(diǎn):
首先,注 4 + z { # 。E % 刪除 130 行收錄/幫助程序/存檔.helper.php 文件
$tags .= ($tags==“ ? $row['標簽'] : ','.$row['標簽']);
用以下?!C 語(yǔ)句替換,當然是 J { |R 您還可以添加自己的樣式:
$tags .= “_ % k a !php?/”.urlencode($row['tag']).“ /'>”.$row['tag'].”";
添加 # z ; ! p t ] o 下一代 { 0 H R i 代碼:
if ( ! function_exists(7 h * Y 0 r Q'GetTagk')){
函數 GetTagk($aid)
{@ / ! ; * K { i
全球$dsql;
$tagk = “;
$query = “選擇標簽,從'ma_taglist'中輔助,其中aid='$aid'”;
$dsql->Execute('tagD v ^ n b',$query);
while($row = $dsql->GetArray('tag'))
{
$tagk .= ($t\ Z * & \ } 3agk==“n 1 i ? $row['tag'] : ','.$row['tag']);
}
返回 $ta 2 V )O { mgk;
}
}
然后,打開(kāi) dede/a( h m^ Jrticle_edit.php 找到:
$tags = Gf I j DetTags($aid);
添加以下內容:
$t( H e ~ M T 8 | *agk = GetTagk($o Q D Jaid);
打開(kāi) dede/tempj x z t F n h mlets/article_edit.htm 再次調用標簽標簽
學(xué)習筆記:學(xué)python,怎么能不學(xué)習scrapy呢
本文分享自華為云社區《學(xué)python怎么能不學(xué)scrapy?本博客帶你學(xué)起來(lái)-云社區-華為云》,作者:橡皮擦。
在正式寫(xiě)爬蟲(chóng)案例之前,我們先系統地了解一下scrapy。
scrapy安裝和簡(jiǎn)單操作
使用命令pip install scrapy進(jìn)行安裝。安裝成功后,需要采集幾個(gè)網(wǎng)址,方便后續學(xué)習使用。
安裝完成后,直接在控制臺輸入scrapy,出現如下命令即表示安裝成功。
> scrapy
Scrapy 2.5.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
上圖是scrapy內置命令列表,標準格式的scrapy,可以通過(guò)scrapy -h查看指定命令的幫助手冊。
scrapy中有兩種命令,一種是全局的,一種是項目中的。后者需要進(jìn)入scrapy目錄才能運行。
這些命令一開(kāi)始不需要完全記住,隨時(shí)可以查看。還有幾個(gè)比較常用的,例如:
**scrpy 啟動(dòng)項目**
該命令首先根據項目名稱(chēng)創(chuàng )建一個(gè)文件夾,然后在該文件夾下創(chuàng )建一個(gè)scrpy項目。這一步是所有后續代碼的起點(diǎn)。
> scrapy startproject my_scrapy
> New Scrapy project 'my_scrapy', using template directory 'e:\pythonproject\venv\lib\site-packages\scrapy\templates\project', created in: # 一個(gè)新的 scrapy 項目被創(chuàng )建了,使用的模板是 XXX,創(chuàng )建的位置是 XXX
E:\pythonProject\滾雪球學(xué)Python第4輪\my_scrapy
You can start your first spider with: # 開(kāi)啟你的第一個(gè)爬蟲(chóng)程序
cd my_scrapy # 進(jìn)入文件夾
scrapy genspider example example.com # 使用項目命令創(chuàng )建爬蟲(chóng)文件
以上內容添加了一些評論,可以對照學(xué)習。默認生成的文件位于 python 運行時(shí)目錄中。如果要修改項目目錄,請使用如下格式化命令:
scrapy startproject myproject [project_dir]
例如
scrapy startproject myproject d:/d1
命令基于模板創(chuàng )建的項目結構如下,其中紅色下劃線(xiàn)為項目目錄,綠色下劃線(xiàn)為scrapy項目。如果要運行項目命令,首先要進(jìn)入項目目錄下紅色下劃線(xiàn)的my_scrapy文件夾??刂祈椖?。
下面生成爬蟲(chóng)文件
使用命令scrapy genspider [-t template]生成爬蟲(chóng)文件。該方法是快捷操作,也可以手動(dòng)創(chuàng )建。創(chuàng )建的爬蟲(chóng)文件會(huì )出現在當前目錄或項目文件夾下的spiders文件夾中,name為爬蟲(chóng)名稱(chēng),domain用于爬蟲(chóng)文件中allowed_domains和start_urls數據,[-t template]表示可以選擇生成文件模板。
要查看所有模板,請使用以下命令,默認模板是 basic。
> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed
創(chuàng )建第一個(gè)scrapy爬蟲(chóng)文件,測試命令如下:
>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm
這時(shí)在spiders文件夾中,出現了pm.py文件,文件內容如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['imspm.com']
start_urls = ['http://imspm.com/']
def parse(self, response):
pass
測試 scrapy 爬蟲(chóng)運行
使用命令scrapy crawl,spider是上面生成的爬蟲(chóng)文件名,如果出現如下內容,說(shuō)明爬蟲(chóng)加載正確。
>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]
scrapy的基本應用
scrapy 的工作流程非常簡(jiǎn)單:
采集首頁(yè)源碼;分析首頁(yè)源碼,獲取下一頁(yè)鏈接;請求下一頁(yè)的源代碼;解析源碼,獲取下一頁(yè)的源碼;[…] 過(guò)程中,提取到目標數據后,保存。
下面給大家展示一個(gè)scrapy的完整案例應用,作為爬蟲(chóng)120案例scrapy部分的第一個(gè)例子。
> scrapy startproject my_project 爬蟲(chóng)
> cd 爬蟲(chóng)
<p>
> scrapy genspider pm imspm.com</p>
得到項目結構如下:
對上圖中部分文件的簡(jiǎn)要說(shuō)明。
使用scrapy crawl pm運行爬蟲(chóng)后,所有的輸出和描述如下:
上面代碼的請求次數是7次,因為pm.py文件中默認沒(méi)有添加www。如果添加此內容,則請求數變?yōu)?4。
當前pm.py文件代碼如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['www.imspm.com']
start_urls = ['http://www.imspm.com/']
def parse(self, response):
print(response.text)
其中的parse是指請求start_urls中的地址,得到response后的回調函數,通過(guò)參數response的.text屬性直接輸出網(wǎng)頁(yè)源碼。
獲取到源碼后,需要對源碼進(jìn)行解析存儲
在存儲之前,需要手動(dòng)定義一個(gè)數據結構,在items.py文件中實(shí)現,修改代碼中的類(lèi)名,MyProjectItem → ArticleItem。
import scrapy
class ArticleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() # 文章標題
url = scrapy.Field() # 文章地址
author = scrapy.Field() # 作者
修改pm.py文件中的parse函數,增加網(wǎng)頁(yè)解析相關(guān)操作。這個(gè)操作類(lèi)似于pyquery的知識點(diǎn),直接觀(guān)察代碼就可以掌握。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for item in list_item:
title = item.css('.title::text').extract_first() # 直接獲取文本
url = item.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = item.css('.author::text').extract_first() # 直接獲取文本
print(title, url, author)
response.css 方法返回一個(gè)選擇器列表,可以對其進(jìn)行迭代,然后對其中的對象調用 css 方法。
在pm.py中導入items.py中的ArticleItem類(lèi),然后按照如下代碼修改:
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
<p>
item['author'] = author
yield item</p>
這時(shí)候scrapy爬蟲(chóng)運行時(shí),會(huì )出現如下提示信息。
至此一個(gè)單頁(yè)爬蟲(chóng)就完成了
接下來(lái)再次修改parse函數,解析完第一頁(yè)后,再解析第二頁(yè)的數據。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
item['author'] = author
yield item
next = response.css('.nav a:nth-last-child(2)::attr(href)').extract_first() # 獲取下一頁(yè)鏈接
# print(next)
# 再次生成一個(gè)請求
yield scrapy.Request(url=next, callback=self.parse)
上面代碼中,變量next代表下一頁(yè)的地址,通過(guò)response.css函數獲取鏈接。請重點(diǎn)學(xué)習css選擇器。
產(chǎn)量下降。request(url=next, callback=self.parse)表示重新創(chuàng )建一個(gè)請求,請求的回調函數是parse自身,代碼運行效果如下。
如果要保存運行結果,只需運行以下命令即可。
scrapy crawl pm -o pm.json
如果要將每條數據存儲為單獨的一行,請使用以下命令 scrapy crawl pm -o pm.jl 。
生成的文件還支持csv、xml、marchal、pickle,大家可以自己試試。
讓我們使用數據管道
打開(kāi)pipelines.py文件,修改類(lèi)名MyProjectPipeline→TitlePipeline,然后編譯如下代碼:
class TitlePipeline:
def process_item(self, item, spider): # 移除標題中的空格
if item["title"]:
item["title"] = item["title"].strip()
return item
else:
return DropItem("異常數據")
此代碼用于去除標題中的左右空格。
寫(xiě)入后需要在settings.py文件中開(kāi)啟ITEM_PIPELINES配置。
ITEM_PIPELINES = {
'my_project.pipelines.TitlePipeline': 300,
}
300是PIPELINES操作的優(yōu)先順序,可以根據需要修改。再次運行爬蟲(chóng)代碼,你會(huì )發(fā)現標題的左右空格已經(jīng)被去掉了。
至此,一個(gè)scrapy的基礎爬蟲(chóng)就寫(xiě)好了。
戳下方關(guān)注,第一時(shí)間了解華為云的新鮮技術(shù)~
華為云博客_大數據博客_人工智能博客_云計算博客_開(kāi)發(fā)者中心-華為云 查看全部
教程:dedecms織夢(mèng)TAG標簽調用代碼
標簽標簽
是一種自己定義的關(guān)鍵詞,比分類(lèi)更準確、更具體,可以概括文章主要內容,合理使用TAG標簽,可以讓你發(fā)表的文章更容易檢索。
很多網(wǎng)站首頁(yè)、列表頁(yè)和文章頁(yè)都用超鏈接調用TAG關(guān)鍵詞,有利于蜘蛛搜索和抓取,也有利于用戶(hù)點(diǎn)擊,那么如何在織夢(mèng)dedecms系統的網(wǎng)站上實(shí)現此功能呢?對此,做網(wǎng)站吧,整理出以下方法供大家使用:
1、TaT ?B 6g 標簽 o V % 的語(yǔ)法解釋
基本語(yǔ)法:
{dede:tag row='30' sort='new' getall='0′}
c B 8 r///a/dedejq/[field:link/]'>[field:tag /]
{/dede:tag}
參數說(shuō)明:
row=K z 9 W k \ B * x '30' 呼叫號碼為 30
sort='new' 排序 月, 蘭特, 周
getall='0' 獲取當前內容頁(yè)面 TAG 標記的類(lèi)型 0,以及獲取所有 TAG 標記的類(lèi)型 1。
基礎模板字段:鏈接、標記
2. 最新的標簽標簽稱(chēng)為
{dede:tag row='30' sort='new'}[字段:突出顯示/]
?。╗字段:結果/])
{/dede:tag}
3.調用本月熱門(mén)標簽標簽
{dede:tag row='30' sort='month'}I d s d stp:///a/dedejq/[field:link/]'>[field:
tagname/]([field:result/])
{/dede:tag}
4. 隨機標簽調用
{deu } ^de:tag row='60' sort='rand'}
$ J | m W 5 F /a/dedejq/[field:link/]'>[field:highlight/]([field:result/])
{/dede:tag}
5. 采集熱 [# W 0 V N L n – 門(mén)標簽,轉換后刷新
模板代碼:
{dede:tag row='10' sort='month' }
, E y u mom/a/dedejq/[field:link/]'>[field:tagname/] &o : T # hlt;/a>
{/dede:tag}
^ e 8 {t language=“JavaScript”>
偏移量){
tag_a.className=“tag”+(rnd-offsc y 2 4et);
}
}
}/
/–>
CSS代碼:
.tag1 { color:h Z j j m G i + X#339900; font-weight:bold; }
.tag2 { color:#e65730; }
.tag3 { color:#00b9da; }
.tag4 { color:#FG 2 4 C +E3981; 7 5 ) T [ Jfont-weighW Z P 7 } G &t:bold; font-size:14px; }
6. 在頁(yè)面文章調用標簽標簽
{J w % = S y p 8 gdede:tag table='dede_search_keywords' sort='keyword' row='2′ ifd O b y F=“}
\ L \dedejq/[field:link/]' target=_i 7 * # _blank>[field:tag /]
{/dede:tag}
或
{dede:fie# n : 2 [ r XLD name='Keywords' runphp='yes' }
if(!empty(@me)){
$kws = 爆炸(' ',@me);
@me = “”;
foreach($kws as $k){
@me .= “O / x 4 # '/tag.php?/$k/'>$k ”;
}

@me= str_repla' $ F 0 }ce('+', ' ',trim(@me));
}
{/dede:field}
7. 列表頁(yè)調用 TAG 標簽的兩個(gè) b # k F w D 方法
dedecms列表中的默認值無(wú)法調用 tag\q v C; _ X 標簽。Do 網(wǎng)站 G * { r p i, 7 n 為您提供以下不同版本的標簽標簽調用 T D G A p A are you 方法:
?。?)、de, w \decms 5.7 調用方法
首先,找到 include\helpers\archive.helper.php 文件(注:有些朋友會(huì )有疑問(wèn),首頁(yè)和頻道,列表應該添加不同的調用,但我開(kāi)始用列表頁(yè)面測試,成功;添加 m \ b v q r 首頁(yè)后,測試也進(jìn)入了 D Y G R U Y T + D 功能顯示,所以我沒(méi)有繼續深入研究,另外,這個(gè)文件的內容發(fā)生了變化,在后臺文件是無(wú)法更改的,提示 _&0 7 是注入 sql,所以要在 ftp 中找到這個(gè)文件來(lái)更改 0。)
在底部添加:
函數; f G GetTags_list($aid)
{
全球$dsql;
$tags = “;
$query = “從'ma_taglisi v \ at'中選擇標簽,其中aid='$aid'”;
~ w T $dsql->Execute('tag',$query);
0 I 5 + 2 y a s whil' j % s ~ we($row = $dsql->GetArray('tag'))
{
$tags .= ($tags==“ ?“9 R.Q e #<^ ) \ n 6;a hreb E H f Q uf='“.urlencode($row['tag']).”' &gl f _t;Y ] R 5 L t # = G“.$row['tag'].”“ : ','.”O % V x b ^ .i P /tags.php?/“.urlencode($row['tag']).”' >“.$row['tag'].”“);
}
返回 $tau P % @ rgs;
}
那么Q I S + v b H k,加上:,這里列表需要調用標簽標簽
[字段:id 函數=GetTags_list(@me)/]
以完成。
?。?)、dedecms 5K T y W + C g j.6 版本 G \ G Y # |G本的調用方法
方法一:
只需在模板需要的地方添加以下代碼:
[字段:ID runphp=yes]
$tsql = new DedeSql(false);
$tags = “B F e –;
$tsql->SetQuery(“選擇 i.tag 從 dede_taglist t 左連接 dede_tagindex i on i.id=t.tid 其中 t.an / ;E Zid='@me'“);
$tsql-e ) ;>ExG V q @ecute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “”.$row['tag'].“ &k u blt;/a>”;
}
@me=$tags;
[/字段:id]
注意:此步驟無(wú)法在 dede 5.7 中實(shí)現。
方法2:
打開(kāi) dedecms根目錄 T k Y ~include/common.func.php,在底部的 “!k ?A b O?>“在以下代碼之前:
讓我們做網(wǎng)站:列表頁(yè)調用標簽的方法
函數列表標簽($aid)
{
$tsql = new DedeSql(false);
$tags = “;{ ( n : u X ' , m
$tsql->SetQuery(“Select i.tag FrM .o 9 Oom dt 7 ;2 j ] ^ede_taglist t left join dede_tagindex i on i.id=t.tid where t.aid='$aid'“);
$tsql->執行('t');
whi– x W s e – ale($row = $tsql->GetArray('t',MYSQL_ASSOC)){7 C \ j
$tags .= “D ( & 6lencode($row['tag']).” /'>“.$rowj 0 Y ? x v z o J['tag'].”";
}% W ?z F |_ = i
雷圖]U Y骨灰盒$tags;
}
{@ ? n i 2 0 , 5 4dede:field.id runphp=yes}
$tsql = new DedeSql(false);
$tags = “;

$tsql->SetQuery(“Select i.tag From ded\ } q |e_taglist t left join dede_tak f 4gindex i on i.id=t.tid where t.aid='@me'”);
$' 1 ~tsql->Execute('t');
while($row = $tsql->GetArray('t',MYSQL_ASSOC)){
$tags .= “e D Hhp?/”.urlencode($row['tag']).“' >”.$row['tag'].“”;
}
@me=$# A F ytags;
{/dede:field.id}
添加代碼 6 j't*$x 后,可以使用列表頁(yè):
{m s s C $dede:field.id function=“l(fā)isttag(@me)”/}
以調用標簽標簽。
方法三:
inc_functions.php 添加 :
函數列表標記($aid){
$tsql = new DedeSql(p ' w x 8 Q 3 s tfalse);
$tags = “;
$tsql->SetQuery(“Select i.tagname From xkzzz_tag_list t left join xkzzz_tu 4 t \ 0 { x gag_index i on i.id=t.tid where t.aid='$aid'”);
$tsql->執行('t');
while($row = $tsql->Getj [ x &Array('t'{ N f M K v S,MYSQL_AO r _ 0 |SSOC)){
$tags .= “s 1 j { ~ + !/tag.php?/”.urlencodeE # 6 [ z H 0 V Y($row['tagname']).“' >”.$rowu F G y A ,['tagname'].“”;
}
+ _ c j c 6 d 返回$tags;
}
然后添加 :,其中列表頁(yè)位于
[字段:ID 函數=“列表標記(@me)”/]
可以調出來(lái),但是這個(gè)方法也需要更改程序文件,看不懂代碼的朋友,慎用吧!
8. 首頁(yè)調用該方法文章 Tg j LAG 標簽
如果您網(wǎng)站使用 dedecms v5.7 可以使用以下標簽:
徑直
[field:id function=GetTags(@me)/]
可以調出,但不能調出g Y # k x s T O \沒(méi)有連接,為了添加標簽標簽的鏈接,還需要做到以下幾點(diǎn):
首先,注 4 + z { # 。E % 刪除 130 行收錄/幫助程序/存檔.helper.php 文件
$tags .= ($tags==“ ? $row['標簽'] : ','.$row['標簽']);
用以下?!C 語(yǔ)句替換,當然是 J { |R 您還可以添加自己的樣式:
$tags .= “_ % k a !php?/”.urlencode($row['tag']).“ /'>”.$row['tag'].”";
添加 # z ; ! p t ] o 下一代 { 0 H R i 代碼:
if ( ! function_exists(7 h * Y 0 r Q'GetTagk')){
函數 GetTagk($aid)
{@ / ! ; * K { i
全球$dsql;
$tagk = “;
$query = “選擇標簽,從'ma_taglist'中輔助,其中aid='$aid'”;
$dsql->Execute('tagD v ^ n b',$query);
while($row = $dsql->GetArray('tag'))
{
$tagk .= ($t\ Z * & \ } 3agk==“n 1 i ? $row['tag'] : ','.$row['tag']);
}
返回 $ta 2 V )O { mgk;
}
}
然后,打開(kāi) dede/a( h m^ Jrticle_edit.php 找到:
$tags = Gf I j DetTags($aid);
添加以下內容:
$t( H e ~ M T 8 | *agk = GetTagk($o Q D Jaid);
打開(kāi) dede/tempj x z t F n h mlets/article_edit.htm 再次調用標簽標簽
學(xué)習筆記:學(xué)python,怎么能不學(xué)習scrapy呢
本文分享自華為云社區《學(xué)python怎么能不學(xué)scrapy?本博客帶你學(xué)起來(lái)-云社區-華為云》,作者:橡皮擦。
在正式寫(xiě)爬蟲(chóng)案例之前,我們先系統地了解一下scrapy。
scrapy安裝和簡(jiǎn)單操作
使用命令pip install scrapy進(jìn)行安裝。安裝成功后,需要采集幾個(gè)網(wǎng)址,方便后續學(xué)習使用。
安裝完成后,直接在控制臺輸入scrapy,出現如下命令即表示安裝成功。
> scrapy
Scrapy 2.5.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
上圖是scrapy內置命令列表,標準格式的scrapy,可以通過(guò)scrapy -h查看指定命令的幫助手冊。
scrapy中有兩種命令,一種是全局的,一種是項目中的。后者需要進(jìn)入scrapy目錄才能運行。
這些命令一開(kāi)始不需要完全記住,隨時(shí)可以查看。還有幾個(gè)比較常用的,例如:
**scrpy 啟動(dòng)項目**
該命令首先根據項目名稱(chēng)創(chuàng )建一個(gè)文件夾,然后在該文件夾下創(chuàng )建一個(gè)scrpy項目。這一步是所有后續代碼的起點(diǎn)。
> scrapy startproject my_scrapy
> New Scrapy project 'my_scrapy', using template directory 'e:\pythonproject\venv\lib\site-packages\scrapy\templates\project', created in: # 一個(gè)新的 scrapy 項目被創(chuàng )建了,使用的模板是 XXX,創(chuàng )建的位置是 XXX
E:\pythonProject\滾雪球學(xué)Python第4輪\my_scrapy
You can start your first spider with: # 開(kāi)啟你的第一個(gè)爬蟲(chóng)程序
cd my_scrapy # 進(jìn)入文件夾
scrapy genspider example example.com # 使用項目命令創(chuàng )建爬蟲(chóng)文件
以上內容添加了一些評論,可以對照學(xué)習。默認生成的文件位于 python 運行時(shí)目錄中。如果要修改項目目錄,請使用如下格式化命令:
scrapy startproject myproject [project_dir]
例如
scrapy startproject myproject d:/d1
命令基于模板創(chuàng )建的項目結構如下,其中紅色下劃線(xiàn)為項目目錄,綠色下劃線(xiàn)為scrapy項目。如果要運行項目命令,首先要進(jìn)入項目目錄下紅色下劃線(xiàn)的my_scrapy文件夾??刂祈椖?。
下面生成爬蟲(chóng)文件
使用命令scrapy genspider [-t template]生成爬蟲(chóng)文件。該方法是快捷操作,也可以手動(dòng)創(chuàng )建。創(chuàng )建的爬蟲(chóng)文件會(huì )出現在當前目錄或項目文件夾下的spiders文件夾中,name為爬蟲(chóng)名稱(chēng),domain用于爬蟲(chóng)文件中allowed_domains和start_urls數據,[-t template]表示可以選擇生成文件模板。
要查看所有模板,請使用以下命令,默認模板是 basic。
> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed
創(chuàng )建第一個(gè)scrapy爬蟲(chóng)文件,測試命令如下:
>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm
這時(shí)在spiders文件夾中,出現了pm.py文件,文件內容如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['imspm.com']
start_urls = ['http://imspm.com/']
def parse(self, response):
pass
測試 scrapy 爬蟲(chóng)運行
使用命令scrapy crawl,spider是上面生成的爬蟲(chóng)文件名,如果出現如下內容,說(shuō)明爬蟲(chóng)加載正確。
>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]
scrapy的基本應用
scrapy 的工作流程非常簡(jiǎn)單:
采集首頁(yè)源碼;分析首頁(yè)源碼,獲取下一頁(yè)鏈接;請求下一頁(yè)的源代碼;解析源碼,獲取下一頁(yè)的源碼;[…] 過(guò)程中,提取到目標數據后,保存。
下面給大家展示一個(gè)scrapy的完整案例應用,作為爬蟲(chóng)120案例scrapy部分的第一個(gè)例子。
> scrapy startproject my_project 爬蟲(chóng)
> cd 爬蟲(chóng)
<p>

> scrapy genspider pm imspm.com</p>
得到項目結構如下:
對上圖中部分文件的簡(jiǎn)要說(shuō)明。
使用scrapy crawl pm運行爬蟲(chóng)后,所有的輸出和描述如下:
上面代碼的請求次數是7次,因為pm.py文件中默認沒(méi)有添加www。如果添加此內容,則請求數變?yōu)?4。
當前pm.py文件代碼如下:
import scrapy
class PmSpider(scrapy.Spider):
name = 'pm'
allowed_domains = ['www.imspm.com']
start_urls = ['http://www.imspm.com/']
def parse(self, response):
print(response.text)
其中的parse是指請求start_urls中的地址,得到response后的回調函數,通過(guò)參數response的.text屬性直接輸出網(wǎng)頁(yè)源碼。
獲取到源碼后,需要對源碼進(jìn)行解析存儲
在存儲之前,需要手動(dòng)定義一個(gè)數據結構,在items.py文件中實(shí)現,修改代碼中的類(lèi)名,MyProjectItem → ArticleItem。
import scrapy
class ArticleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field() # 文章標題
url = scrapy.Field() # 文章地址
author = scrapy.Field() # 作者
修改pm.py文件中的parse函數,增加網(wǎng)頁(yè)解析相關(guān)操作。這個(gè)操作類(lèi)似于pyquery的知識點(diǎn),直接觀(guān)察代碼就可以掌握。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for item in list_item:
title = item.css('.title::text').extract_first() # 直接獲取文本
url = item.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = item.css('.author::text').extract_first() # 直接獲取文本
print(title, url, author)
response.css 方法返回一個(gè)選擇器列表,可以對其進(jìn)行迭代,然后對其中的對象調用 css 方法。
在pm.py中導入items.py中的ArticleItem類(lèi),然后按照如下代碼修改:
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
<p>

item['author'] = author
yield item</p>
這時(shí)候scrapy爬蟲(chóng)運行時(shí),會(huì )出現如下提示信息。
至此一個(gè)單頁(yè)爬蟲(chóng)就完成了
接下來(lái)再次修改parse函數,解析完第一頁(yè)后,再解析第二頁(yè)的數據。
def parse(self, response):
# print(response.text)
list_item = response.css('.list-item-default')
# print(list_item)
for i in list_item:
item = ArticleItem()
title = i.css('.title::text').extract_first() # 直接獲取文本
url = i.css('.a_block::attr(href)').extract_first() # 獲取屬性值
author = i.css('.author::text').extract_first() # 直接獲取文本
# print(title, url, author)
# 對 item 進(jìn)行賦值
item['title'] = title
item['url'] = url
item['author'] = author
yield item
next = response.css('.nav a:nth-last-child(2)::attr(href)').extract_first() # 獲取下一頁(yè)鏈接
# print(next)
# 再次生成一個(gè)請求
yield scrapy.Request(url=next, callback=self.parse)
上面代碼中,變量next代表下一頁(yè)的地址,通過(guò)response.css函數獲取鏈接。請重點(diǎn)學(xué)習css選擇器。
產(chǎn)量下降。request(url=next, callback=self.parse)表示重新創(chuàng )建一個(gè)請求,請求的回調函數是parse自身,代碼運行效果如下。
如果要保存運行結果,只需運行以下命令即可。
scrapy crawl pm -o pm.json
如果要將每條數據存儲為單獨的一行,請使用以下命令 scrapy crawl pm -o pm.jl 。
生成的文件還支持csv、xml、marchal、pickle,大家可以自己試試。
讓我們使用數據管道
打開(kāi)pipelines.py文件,修改類(lèi)名MyProjectPipeline→TitlePipeline,然后編譯如下代碼:
class TitlePipeline:
def process_item(self, item, spider): # 移除標題中的空格
if item["title"]:
item["title"] = item["title"].strip()
return item
else:
return DropItem("異常數據")
此代碼用于去除標題中的左右空格。
寫(xiě)入后需要在settings.py文件中開(kāi)啟ITEM_PIPELINES配置。
ITEM_PIPELINES = {
'my_project.pipelines.TitlePipeline': 300,
}
300是PIPELINES操作的優(yōu)先順序,可以根據需要修改。再次運行爬蟲(chóng)代碼,你會(huì )發(fā)現標題的左右空格已經(jīng)被去掉了。
至此,一個(gè)scrapy的基礎爬蟲(chóng)就寫(xiě)好了。
戳下方關(guān)注,第一時(shí)間了解華為云的新鮮技術(shù)~
華為云博客_大數據博客_人工智能博客_云計算博客_開(kāi)發(fā)者中心-華為云
解決方案:VS2022基于C語(yǔ)言的動(dòng)態(tài)鏈接庫創(chuàng )建與調用
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 331 次瀏覽 ? 2022-11-17 00:21
//extern "C",告訴編譯器它所修飾的代碼按c語(yǔ)言方式編譯
//"__declspec(dllexport)",告訴編譯器和鏈接器此函數需要從DLL導出
extern "C" _declspec(dllexport) int Sour_Initialize(char* rsrcname);
//函數原型所依賴(lài)的lib文件
#pragma comment(lib, "test.lib")
5.關(guān)閉一些錯誤警告
對于 Visual Studio 庫中的許多函數、成員函數、函數模板和全局變量,此錯誤已棄用。一些函數/變量(例如 POSIX 和 Microsoft 特定函數)已被棄用,因為它們現在使用不同的首選名稱(chēng)。一些 C 運行時(shí)庫函數已被棄用,因為它們不安全,現在有更安全的變體。其他函數/變量已棄用,因為它們已過(guò)時(shí)。棄用消息通常包括已棄用函數或全局變量的建議替換。
我這里試試沒(méi)有錯,在函數聲明的頭文件中加入如下代碼,直接關(guān)閉提示
#pragma warning(disable : 4996)
<p>
</p>
6.編譯
生成的庫需要在32位環(huán)境下編譯,這里選擇x86
如果成功,在項目文件夾中尋找DEBUG文件夾,會(huì )生成需要的DLL文件和LIB文件
三、調用動(dòng)態(tài)鏈接庫 1、創(chuàng )建項目
選擇控制臺應用程序
2.復制dll文件和lib文件
將剛剛創(chuàng )建的dll文件和lib文件復制到本項目的文件夾中
3. 添加.dll、.lib、.h文件
將聲明函數原型的.dll文件、.lib文件和.h文件添加到項目中
4.修改.h文件
在.h文件中添加以下代碼
#pragma once
//函數原型所依賴(lài)的lib庫
#pragma comment(lib, "test.lib")
//剛剛生成的lib庫
#pragma comment(lib, "TestDLL.lib")
將函數聲明前的“extern "C" _declspec(dllexport)" 更改為 "extern "C" _declspec(dllimport)"
extern "C" _declspec(dllimport) int Sour_Initialize(char* rsrcname);
5.main函數編寫(xiě)調用邏輯
在你寫(xiě)的函數的main函數中調用就可以了。
核心方法:內容和標記SEO分析工具
您的 網(wǎng)站 頁(yè)面排名因素來(lái)自 網(wǎng)站 內容和標記。因此,優(yōu)化內容并盡量減少標記中的錯誤非常重要。
1.SEO瀏覽器
SEO 瀏覽器是最古老的免費 SEO 工具之一,但它仍然非常有用。該工具是 100% 免費的,它提供兩種模式:簡(jiǎn)單模式和高級模式。簡(jiǎn)單模式像基于文本的 Web 瀏覽器(例如,lynx)一樣顯示給定的 URL。高級模式提供基于文本的 URL 視圖,它還包括總結 URL 內容的有用信息(例如頁(yè)面標題、元標記、頁(yè)面大小、字數、IP 地址等)。
2. 復制景觀(guān)
Copyscape 是一種使用免費增值模式的在線(xiàn)重復內容檢測工具。您只需輸入頁(yè)面的 URL,該工具就會(huì )返回重復該 URL 內容的頁(yè)面列表。對于免費帳戶(hù),該工具僅顯示前十名結果,并且該工具每月僅允許來(lái)自任何給定站點(diǎn)的一定數量的請求(此限制與通過(guò) IP 提交請求無(wú)關(guān))。
3.W3C 標記驗證服務(wù)
W3C 標記驗證服務(wù) 標記驗證服務(wù)是一個(gè)免費的在線(xiàn)工具,用于檢查與給定 URI 關(guān)聯(lián)的 Web 文檔的標記有效性。您只需輸入一個(gè) URI,該工具就會(huì )檢查它的正確性(基于其文檔類(lèi)型的語(yǔ)法)。最后,該工具會(huì )顯示在驗證過(guò)程中發(fā)現的錯誤和警告的逐項列表(具有相應的行號和列號)。
歷史上的今天: 查看全部
解決方案:VS2022基于C語(yǔ)言的動(dòng)態(tài)鏈接庫創(chuàng )建與調用
//extern "C",告訴編譯器它所修飾的代碼按c語(yǔ)言方式編譯
//"__declspec(dllexport)",告訴編譯器和鏈接器此函數需要從DLL導出
extern "C" _declspec(dllexport) int Sour_Initialize(char* rsrcname);
//函數原型所依賴(lài)的lib文件
#pragma comment(lib, "test.lib")
5.關(guān)閉一些錯誤警告
對于 Visual Studio 庫中的許多函數、成員函數、函數模板和全局變量,此錯誤已棄用。一些函數/變量(例如 POSIX 和 Microsoft 特定函數)已被棄用,因為它們現在使用不同的首選名稱(chēng)。一些 C 運行時(shí)庫函數已被棄用,因為它們不安全,現在有更安全的變體。其他函數/變量已棄用,因為它們已過(guò)時(shí)。棄用消息通常包括已棄用函數或全局變量的建議替換。
我這里試試沒(méi)有錯,在函數聲明的頭文件中加入如下代碼,直接關(guān)閉提示
#pragma warning(disable : 4996)
<p>

</p>
6.編譯
生成的庫需要在32位環(huán)境下編譯,這里選擇x86
如果成功,在項目文件夾中尋找DEBUG文件夾,會(huì )生成需要的DLL文件和LIB文件
三、調用動(dòng)態(tài)鏈接庫 1、創(chuàng )建項目
選擇控制臺應用程序
2.復制dll文件和lib文件
將剛剛創(chuàng )建的dll文件和lib文件復制到本項目的文件夾中
3. 添加.dll、.lib、.h文件
將聲明函數原型的.dll文件、.lib文件和.h文件添加到項目中
4.修改.h文件

在.h文件中添加以下代碼
#pragma once
//函數原型所依賴(lài)的lib庫
#pragma comment(lib, "test.lib")
//剛剛生成的lib庫
#pragma comment(lib, "TestDLL.lib")
將函數聲明前的“extern "C" _declspec(dllexport)" 更改為 "extern "C" _declspec(dllimport)"
extern "C" _declspec(dllimport) int Sour_Initialize(char* rsrcname);
5.main函數編寫(xiě)調用邏輯
在你寫(xiě)的函數的main函數中調用就可以了。
核心方法:內容和標記SEO分析工具
您的 網(wǎng)站 頁(yè)面排名因素來(lái)自 網(wǎng)站 內容和標記。因此,優(yōu)化內容并盡量減少標記中的錯誤非常重要。
1.SEO瀏覽器

SEO 瀏覽器是最古老的免費 SEO 工具之一,但它仍然非常有用。該工具是 100% 免費的,它提供兩種模式:簡(jiǎn)單模式和高級模式。簡(jiǎn)單模式像基于文本的 Web 瀏覽器(例如,lynx)一樣顯示給定的 URL。高級模式提供基于文本的 URL 視圖,它還包括總結 URL 內容的有用信息(例如頁(yè)面標題、元標記、頁(yè)面大小、字數、IP 地址等)。
2. 復制景觀(guān)
Copyscape 是一種使用免費增值模式的在線(xiàn)重復內容檢測工具。您只需輸入頁(yè)面的 URL,該工具就會(huì )返回重復該 URL 內容的頁(yè)面列表。對于免費帳戶(hù),該工具僅顯示前十名結果,并且該工具每月僅允許來(lái)自任何給定站點(diǎn)的一定數量的請求(此限制與通過(guò) IP 提交請求無(wú)關(guān))。

3.W3C 標記驗證服務(wù)
W3C 標記驗證服務(wù) 標記驗證服務(wù)是一個(gè)免費的在線(xiàn)工具,用于檢查與給定 URI 關(guān)聯(lián)的 Web 文檔的標記有效性。您只需輸入一個(gè) URI,該工具就會(huì )檢查它的正確性(基于其文檔類(lèi)型的語(yǔ)法)。最后,該工具會(huì )顯示在驗證過(guò)程中發(fā)現的錯誤和警告的逐項列表(具有相應的行號和列號)。
歷史上的今天:
技巧:“手把手”的性能優(yōu)化文章來(lái)了!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-11-16 12:37
通過(guò)setFactory,我們不僅可以控制View的生成,甚至可以將一個(gè)View變成另一個(gè)View。比如文章中,我們把TextView變成了Button。
后續的換皮和一些黑白的方案都是以此為基礎。
這意味著(zhù)我們現在可以:
在運行時(shí),接管某個(gè)View的生成,也就是我們可以去掉單個(gè)View標簽的反射邏輯。
相似代碼:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}
<br />
但是一般網(wǎng)上的項目都很大,可能會(huì )有各種自定義的View,類(lèi)似上面的if else,怎么寫(xiě)呢?
先采集,再手寫(xiě)?
如何采集項目中使用的所有View?
假設我們采集了,如果是手寫(xiě),項目一般都是增量的,那新加的View呢?
我們可以看到我們面臨兩個(gè)問(wèn)題:
如何采集項目中xml中使用的View;
如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
3 確定方案
目標已經(jīng)在這里確定了。
在xml->View的過(guò)程中,去掉反射相關(guān)的邏輯
下面說(shuō)一下如何解決我們面臨的兩個(gè)問(wèn)題:
1、如何采集項目中xml中使用的View;
采集所有xml中用到的View,有一個(gè)簡(jiǎn)單的思路,我們可以解析項目中所有的layout.xml文件,但是項目中的layout.xml文件有各個(gè)module,有些依賴(lài)的aars需要解壓太難.
仔細想想,在我們apk的生成過(guò)程中,資源應該是需要合并的,是否是解析某個(gè)Task合并后的產(chǎn)物。
確實(shí),具體的實(shí)現會(huì )在后面說(shuō)到。
我們來(lái)看第二個(gè)問(wèn)題:
2、如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
我們已經(jīng)能夠采集所有使用過(guò)的視圖列表,因此為此:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}<br />
邏輯規則,簡(jiǎn)單,編譯時(shí)生成一個(gè)代碼類(lèi),完成相關(guān)的轉換代碼生成。這里我選擇apt。
有了xml->View轉換邏輯的代碼類(lèi),只需要在運行時(shí)使用LayoutFactory注入即可。
3.找到安全的注入邏輯
大家都知道我們View生成相關(guān)的邏輯在LayoutInflater下面的代碼中:
View?createViewFromTag(View?parent,?String?name,?Context?context,?AttributeSet?attrs,<br />????????boolean?ignoreThemeAttr)?{<br />???????//?...<br />????View?view;<br />????if?(mFactory2?!=?null)?{<br />????????view?=?mFactory2.onCreateView(parent,?name,?context,?attrs);<br />????}?else?if?(mFactory?!=?null)?{<br />????????view?=?mFactory.onCreateView(name,?context,?attrs);<br />????}?else?{<br />????????view?=?null;<br />????}<br /><br />????if?(view?==?null?&&?mPrivateFactory?!=?null)?{<br />????????view?=?mPrivateFactory.onCreateView(parent,?name,?context,?attrs);<br />????}<br /><br />????if?(view?==?null)?{<br />????????final?Object?lastContext?=?mConstructorArgs[0];<br />????????mConstructorArgs[0]?=?context;<br />????????try?{<br />????????????if?(-1?==?name.indexOf('.'))?{<br />????????????????view?=?onCreateView(parent,?name,?attrs);<br />????????????}?else?{<br />????????????????view?=?createView(name,?null,?attrs);<br />????????????}<br />????????}?finally?{<br />????????????mConstructorArgs[0]?=?lastContext;<br />????????}<br />????}<br /><br />????return?view;<br /><br />}<br />
<br />
View通過(guò)mFactory2、mFactory和mPrivateFactory。建不完,后面等待的就是反思。
前兩個(gè)工廠(chǎng)和支持包一般用于擴展功能,比如TextView->AppCompatTextView。
我們考慮使用 mPrivateFactory。使用mPrivateFactory的好處是,在當前版本中,mPrivateFactory是Activity,所以我們只需要重寫(xiě)Activity的onCreateView即可:
這樣一來(lái),完全不需要hooks,也不會(huì )干擾appcompat相關(guān)的生成邏輯,可謂是零風(fēng)險。
4 開(kāi)始實(shí)施
1.獲取項目中使用的控件名稱(chēng)列表
我新建了一個(gè)工程,在布局文件中寫(xiě)了一些自定義控件,分別叫MyMainView1、MyMainView、MyMainView3、MyMainView4,布局文件就不貼了。
正如我們之前所說(shuō),我們需要在構建apk的過(guò)程中找到一個(gè)合適的注入點(diǎn)來(lái)完成這個(gè)任務(wù)。
那么在apk構建過(guò)程中,什么時(shí)候會(huì )合并資源呢?
我們把構建過(guò)程中的所有任務(wù)打印出來(lái),輸入命令:
./gradlew??app:assembleDebug?--console=plain<br />
<br />
輸出:
>Task?:app:preBuild?UP-TO-DATE<br />>?Task?:app:preDebugBuild?UP-TO-DATE<br />>?Task?:app:checkDebugManifest?UP-TO-DATE<br />>?Task?:app:generateDebugBuildConfig?UP-TO-DATE<br />>?Task?:app:javaPreCompileDebug?UP-TO-DATE<br />>?Task?:app:mainApkListPersistenceDebug?UP-TO-DATE<br />>?Task?:app:generateDebugResValues?UP-TO-DATE<br />>?Task?:app:createDebugCompatibleScreenManifests?UP-TO-DATE<br />>?Task?:app:mergeDebugShaders?UP-TO-DATE<br />>?Task?:app:compileDebugShaders?UP-TO-DATE<br />>?Task?:app:generateDebugAssets?UP-TO-DATE<br />>?Task?:app:compileDebugAidl?NO-SOURCE<br />>?Task?:app:compileDebugRenderscript?NO-SOURCE<br />>?Task?:app:generateDebugResources?UP-TO-DATE<br />>?Task?:app:mergeDebugResources?UP-TO-DATE<br />>?Task?:app:processDebugManifest?UP-TO-DATE<br />>?Task?:app:processDebugResources?UP-TO-DATE<br />>?Task?:app:compileDebugJavaWithJavac?UP-TO-DATE<br />>?Task?:app:compileDebugSources?UP-TO-DATE<br />>?Task?:app:mergeDebugAssets?UP-TO-DATE<br />>?Task?:app:processDebugJavaRes?NO-SOURCE<br />>?Task?:app:mergeDebugJavaResource?UP-TO-DATE<br />>?Task?:app:transformClassesWithDexBuilderForDebug?UP-TO-DATE<br />>?Task?:app:checkDebugDuplicateClasses?UP-TO-DATE<br />>?Task?:app:validateSigningDebug?UP-TO-DATE<br />>?Task?:app:mergeExtDexDebug?UP-TO-DATE<br />>?Task?:app:mergeDexDebug?UP-TO-DATE<br />>?Task?:app:signingConfigWriterDebug?UP-TO-DATE<br />>?Task?:app:mergeDebugJniLibFolders?UP-TO-DATE<br />>?Task?:app:mergeDebugNativeLibs?UP-TO-DATE<br />>?Task?:app:stripDebugDebugSymbols?UP-TO-DATE<br />>?Task?:app:packageDebug?UP-TO-DATE<br />>?Task?:app:assembleDebug?UP-TO-DATE<br />
<br />
哪一個(gè)最像?一看就有一個(gè)Task叫:mergeDebugResources,就是這樣。
對應build目錄,還有一個(gè)mergeDebugResources目錄:
注意里面有一個(gè)merger.xml,里面收錄了整個(gè)項目所有資源的合并內容。
我們打開(kāi)看看:
關(guān)注里面type=layout的相關(guān)標簽。
<br />
<br />
可以看到收錄我們布局文件的路徑,那么我們只需要解析這個(gè)merger.xml,然后在里面找到所有type=layout的標簽,然后解析出布局文件的實(shí)際路徑,然后解析出相應的layout xml來(lái)獲取控件的名稱(chēng)。
對了,這個(gè)任務(wù)需要注入到mergeDebugResources中執行。
如何注入任務(wù)?
很簡(jiǎn)單:
project.afterEvaluate?{<br />????def?mergeDebugResourcesTask?=?project.tasks.findByName("mergeDebugResources")<br />????if?(mergeDebugResourcesTask?!=?null)?{<br />????????def?resParseDebugTask?=?project.tasks.create("ResParseDebugTask",?ResParseTask.class)<br />????????resParseDebugTask.isDebug?=?true<br />????????mergeDebugResourcesTask.finalizedBy(resParseDebugTask);<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
我們首先找到mergeDebugResources任務(wù),然后注入一個(gè)ResParseTask任務(wù)。
然后在ResParseTask中完成文件解析:
<br />
class?ResParseTask?extends?DefaultTask?{<br />????File?viewNameListFile<br />????boolean?isDebug<br />????HashSet?viewSet?=?new?HashSet()<br />????//?自己根據輸出幾個(gè)添加<br />????List?ignoreViewNameList?=?Arrays.asList("include",?"fragment",?"merge",?"view","DateTimeView")<br /><br />????@TaskAction<br />????void?doTask()?{<br /><br />????????File?distDir?=?new?File(project.buildDir,?"tmp_custom_views")<br />????????if?(!distDir.exists())?{<br />????????????distDir.mkdirs()<br />????????}<br />????????viewNameListFile?=?new?File(distDir,?"custom_view_final.txt")<br />????????if?(viewNameListFile.exists())?{<br />????????????viewNameListFile.delete()<br />????????}<br />????????viewNameListFile.createNewFile()<br />????????viewSet.clear()<br />????????viewSet.addAll(ignoreViewNameList)<br /><br />????????try?{<br />????????????File?resMergeFile?=?new?File(project.buildDir,?"/intermediates/incremental/merge"?+?(isDebug???"Debug"?:?"Release")?+?"Resources/merger.xml")<br /><br />????????????println("resMergeFile:${resMergeFile.getAbsolutePath()}?===?${resMergeFile.exists()}")<br /><br />????????????if?(!resMergeFile.exists())?{<br />????????????????return<br />????????????}<br /><br />????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????GPathResult?result?=?slurper.parse(resMergeFile)<br />????????????if?(result.children()?!=?null)?{<br />????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????if?(o?instanceof?Node)?{<br />????????????????????????parseNode(o)<br />????????????????????}<br />????????????????})<br />????????????}<br /><br /><br />????????}?catch?(Throwable?e)?{<br />????????????e.printStackTrace()<br />????????}<br /><br />????}<br /><br />????void?parseNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????if?(node.name()?==?"file"?&&?node.attributes.get("type")?==?"layout")?{<br />????????????String?layoutPath?=?node.attributes.get("path")<br />????????????try?{<br />????????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????????GPathResult?result?=?slurper.parse(layoutPath)<br /><br />????????????????String?viewName?=?result.name();<br />????????????????if?(viewSet.add(viewName))?{<br />????????????????????viewNameListFile.append("${viewName}\n")<br />????????????????}<br />????????????????if?(result.children()?!=?null)?{<br />????????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????????if?(o?instanceof?Node)?{<br />????????????????????????????parseLayoutNode(o)<br />????????????????????????}<br />????????????????????})<br />????????????????}<br />????????????}?catch?(Throwable?e)?{<br />????????????????e.printStackTrace();<br />????????????}<br /><br />????????}?else?{<br />????????????node.childNodes().forEachRemaining({?o?-><br />????????????????if?(o?instanceof?Node)?{<br />????????????????????parseNode(o)<br />????????????????}<br />????????????})<br />????????}<br /><br />????}<br /><br />????void?parseLayoutNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????String?viewName?=?node.name()<br />????????if?(viewSet.add(viewName))?{<br />????????????viewNameListFile.append("${viewName}\n")<br />????????}<br />????????if?(node.childNodes().size()?<br />????????????if?(o?instanceof?Node)?{<br />????????????????parseLayoutNode(o)<br />????????????}<br />????????})<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
代碼很簡(jiǎn)單,主要就是解析merge.xml,找到所有的布局文件,然后解析xml,最后輸出到build目錄。
我們都把代碼寫(xiě)在位于項目根目錄的view_opt.gradle中,應用在app的build.gradle中:
<br />
apply?from:?rootProject.file('view_opt.gradle')<br />
<br />
然后我們再次運行assembleDebug,輸出:
注意上面我們還有一個(gè)ignoreViewNameList對象,我們過(guò)濾了一些特殊的標簽,比如:“include”、“fragment”、“merge”、“view”,你可以根據輸出結果自行添加。
輸出是:
可以看到是去重View的名字。
在這里提一下,很多同學(xué)看到寫(xiě)gradle腳本都會(huì )感到害怕。其實(shí)很簡(jiǎn)單。你可以只寫(xiě)Java。如果不熟悉語(yǔ)法,可以用Java寫(xiě)。沒(méi)有什么特別的。
在這一點(diǎn)上,我們有所有使用的視圖的名稱(chēng)。
2.apt生成代理類(lèi)
有了所有用到的View的名字,然后我們用apt生成一個(gè)代理類(lèi)和代理方法。
要使用 apt,我們需要創(chuàng )建 3 個(gè)新模塊:
ViewOptAnnotation:存儲注解;
ViewOptProcessor:放注解處理器相關(guān)代碼;
ViewOptApi:放相關(guān)API。
關(guān)于A(yíng)pt的基礎知識就不說(shuō)了。這塊知識太復雜了。你可以自己查一下。后面我會(huì )把demo上傳到github,大家自己看看。
直接看我們的核心Processor類(lèi):
<p>@AutoService(Processor.class)<br />public?class?ViewCreatorProcessor?extends?AbstractProcessor?{<br /><br />????private?Messager?mMessager;<br /><br /><br />????@Override<br />????public?synchronized?void?init(ProcessingEnvironment?processingEnvironment)?{<br />????????super.init(processingEnvironment);<br />????????mMessager?=?processingEnv.getMessager();<br />????}<br /><br />????@Override<br />????public?boolean?process(Set 查看全部
技巧:“手把手”的性能優(yōu)化文章來(lái)了!
通過(guò)setFactory,我們不僅可以控制View的生成,甚至可以將一個(gè)View變成另一個(gè)View。比如文章中,我們把TextView變成了Button。
后續的換皮和一些黑白的方案都是以此為基礎。
這意味著(zhù)我們現在可以:
在運行時(shí),接管某個(gè)View的生成,也就是我們可以去掉單個(gè)View標簽的反射邏輯。
相似代碼:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}
<br />
但是一般網(wǎng)上的項目都很大,可能會(huì )有各種自定義的View,類(lèi)似上面的if else,怎么寫(xiě)呢?
先采集,再手寫(xiě)?
如何采集項目中使用的所有View?
假設我們采集了,如果是手寫(xiě),項目一般都是增量的,那新加的View呢?
我們可以看到我們面臨兩個(gè)問(wèn)題:
如何采集項目中xml中使用的View;
如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
3 確定方案
目標已經(jīng)在這里確定了。
在xml->View的過(guò)程中,去掉反射相關(guān)的邏輯
下面說(shuō)一下如何解決我們面臨的兩個(gè)問(wèn)題:
1、如何采集項目中xml中使用的View;
采集所有xml中用到的View,有一個(gè)簡(jiǎn)單的思路,我們可以解析項目中所有的layout.xml文件,但是項目中的layout.xml文件有各個(gè)module,有些依賴(lài)的aars需要解壓太難.
仔細想想,在我們apk的生成過(guò)程中,資源應該是需要合并的,是否是解析某個(gè)Task合并后的產(chǎn)物。
確實(shí),具體的實(shí)現會(huì )在后面說(shuō)到。
我們來(lái)看第二個(gè)問(wèn)題:
2、如何保證編寫(xiě)的View生成代碼兼容項目的正常迭代;
我們已經(jīng)能夠采集所有使用過(guò)的視圖列表,因此為此:
if?("LinearLayout".equals(name)){<br />????View?view?=?new?LinearLayout(context,?attrs);<br />????return?view;<br />}<br />
邏輯規則,簡(jiǎn)單,編譯時(shí)生成一個(gè)代碼類(lèi),完成相關(guān)的轉換代碼生成。這里我選擇apt。
有了xml->View轉換邏輯的代碼類(lèi),只需要在運行時(shí)使用LayoutFactory注入即可。
3.找到安全的注入邏輯
大家都知道我們View生成相關(guān)的邏輯在LayoutInflater下面的代碼中:
View?createViewFromTag(View?parent,?String?name,?Context?context,?AttributeSet?attrs,<br />????????boolean?ignoreThemeAttr)?{<br />???????//?...<br />????View?view;<br />????if?(mFactory2?!=?null)?{<br />????????view?=?mFactory2.onCreateView(parent,?name,?context,?attrs);<br />????}?else?if?(mFactory?!=?null)?{<br />????????view?=?mFactory.onCreateView(name,?context,?attrs);<br />????}?else?{<br />????????view?=?null;<br />????}<br /><br />????if?(view?==?null?&&?mPrivateFactory?!=?null)?{<br />????????view?=?mPrivateFactory.onCreateView(parent,?name,?context,?attrs);<br />????}<br /><br />????if?(view?==?null)?{<br />????????final?Object?lastContext?=?mConstructorArgs[0];<br />????????mConstructorArgs[0]?=?context;<br />????????try?{<br />????????????if?(-1?==?name.indexOf('.'))?{<br />????????????????view?=?onCreateView(parent,?name,?attrs);<br />????????????}?else?{<br />????????????????view?=?createView(name,?null,?attrs);<br />????????????}<br />????????}?finally?{<br />????????????mConstructorArgs[0]?=?lastContext;<br />????????}<br />????}<br /><br />????return?view;<br /><br />}<br />
<br />
View通過(guò)mFactory2、mFactory和mPrivateFactory。建不完,后面等待的就是反思。
前兩個(gè)工廠(chǎng)和支持包一般用于擴展功能,比如TextView->AppCompatTextView。
我們考慮使用 mPrivateFactory。使用mPrivateFactory的好處是,在當前版本中,mPrivateFactory是Activity,所以我們只需要重寫(xiě)Activity的onCreateView即可:
這樣一來(lái),完全不需要hooks,也不會(huì )干擾appcompat相關(guān)的生成邏輯,可謂是零風(fēng)險。
4 開(kāi)始實(shí)施
1.獲取項目中使用的控件名稱(chēng)列表
我新建了一個(gè)工程,在布局文件中寫(xiě)了一些自定義控件,分別叫MyMainView1、MyMainView、MyMainView3、MyMainView4,布局文件就不貼了。
正如我們之前所說(shuō),我們需要在構建apk的過(guò)程中找到一個(gè)合適的注入點(diǎn)來(lái)完成這個(gè)任務(wù)。
那么在apk構建過(guò)程中,什么時(shí)候會(huì )合并資源呢?
我們把構建過(guò)程中的所有任務(wù)打印出來(lái),輸入命令:
./gradlew??app:assembleDebug?--console=plain<br />
<br />
輸出:
>Task?:app:preBuild?UP-TO-DATE<br />>?Task?:app:preDebugBuild?UP-TO-DATE<br />>?Task?:app:checkDebugManifest?UP-TO-DATE<br />>?Task?:app:generateDebugBuildConfig?UP-TO-DATE<br />>?Task?:app:javaPreCompileDebug?UP-TO-DATE<br />>?Task?:app:mainApkListPersistenceDebug?UP-TO-DATE<br />>?Task?:app:generateDebugResValues?UP-TO-DATE<br />>?Task?:app:createDebugCompatibleScreenManifests?UP-TO-DATE<br />>?Task?:app:mergeDebugShaders?UP-TO-DATE<br />>?Task?:app:compileDebugShaders?UP-TO-DATE<br />>?Task?:app:generateDebugAssets?UP-TO-DATE<br />>?Task?:app:compileDebugAidl?NO-SOURCE<br />>?Task?:app:compileDebugRenderscript?NO-SOURCE<br />>?Task?:app:generateDebugResources?UP-TO-DATE<br />>?Task?:app:mergeDebugResources?UP-TO-DATE<br />>?Task?:app:processDebugManifest?UP-TO-DATE<br />>?Task?:app:processDebugResources?UP-TO-DATE<br />>?Task?:app:compileDebugJavaWithJavac?UP-TO-DATE<br />>?Task?:app:compileDebugSources?UP-TO-DATE<br />>?Task?:app:mergeDebugAssets?UP-TO-DATE<br />>?Task?:app:processDebugJavaRes?NO-SOURCE<br />>?Task?:app:mergeDebugJavaResource?UP-TO-DATE<br />>?Task?:app:transformClassesWithDexBuilderForDebug?UP-TO-DATE<br />>?Task?:app:checkDebugDuplicateClasses?UP-TO-DATE<br />>?Task?:app:validateSigningDebug?UP-TO-DATE<br />>?Task?:app:mergeExtDexDebug?UP-TO-DATE<br />>?Task?:app:mergeDexDebug?UP-TO-DATE<br />>?Task?:app:signingConfigWriterDebug?UP-TO-DATE<br />>?Task?:app:mergeDebugJniLibFolders?UP-TO-DATE<br />>?Task?:app:mergeDebugNativeLibs?UP-TO-DATE<br />>?Task?:app:stripDebugDebugSymbols?UP-TO-DATE<br />>?Task?:app:packageDebug?UP-TO-DATE<br />>?Task?:app:assembleDebug?UP-TO-DATE<br />
<br />
哪一個(gè)最像?一看就有一個(gè)Task叫:mergeDebugResources,就是這樣。
對應build目錄,還有一個(gè)mergeDebugResources目錄:
注意里面有一個(gè)merger.xml,里面收錄了整個(gè)項目所有資源的合并內容。
我們打開(kāi)看看:
關(guān)注里面type=layout的相關(guān)標簽。
<br />
<br />
可以看到收錄我們布局文件的路徑,那么我們只需要解析這個(gè)merger.xml,然后在里面找到所有type=layout的標簽,然后解析出布局文件的實(shí)際路徑,然后解析出相應的layout xml來(lái)獲取控件的名稱(chēng)。
對了,這個(gè)任務(wù)需要注入到mergeDebugResources中執行。
如何注入任務(wù)?
很簡(jiǎn)單:
project.afterEvaluate?{<br />????def?mergeDebugResourcesTask?=?project.tasks.findByName("mergeDebugResources")<br />????if?(mergeDebugResourcesTask?!=?null)?{<br />????????def?resParseDebugTask?=?project.tasks.create("ResParseDebugTask",?ResParseTask.class)<br />????????resParseDebugTask.isDebug?=?true<br />????????mergeDebugResourcesTask.finalizedBy(resParseDebugTask);<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
我們首先找到mergeDebugResources任務(wù),然后注入一個(gè)ResParseTask任務(wù)。
然后在ResParseTask中完成文件解析:
<br />
class?ResParseTask?extends?DefaultTask?{<br />????File?viewNameListFile<br />????boolean?isDebug<br />????HashSet?viewSet?=?new?HashSet()<br />????//?自己根據輸出幾個(gè)添加<br />????List?ignoreViewNameList?=?Arrays.asList("include",?"fragment",?"merge",?"view","DateTimeView")<br /><br />????@TaskAction<br />????void?doTask()?{<br /><br />????????File?distDir?=?new?File(project.buildDir,?"tmp_custom_views")<br />????????if?(!distDir.exists())?{<br />????????????distDir.mkdirs()<br />????????}<br />????????viewNameListFile?=?new?File(distDir,?"custom_view_final.txt")<br />????????if?(viewNameListFile.exists())?{<br />????????????viewNameListFile.delete()<br />????????}<br />????????viewNameListFile.createNewFile()<br />????????viewSet.clear()<br />????????viewSet.addAll(ignoreViewNameList)<br /><br />????????try?{<br />????????????File?resMergeFile?=?new?File(project.buildDir,?"/intermediates/incremental/merge"?+?(isDebug???"Debug"?:?"Release")?+?"Resources/merger.xml")<br /><br />????????????println("resMergeFile:${resMergeFile.getAbsolutePath()}?===?${resMergeFile.exists()}")<br /><br />????????????if?(!resMergeFile.exists())?{<br />????????????????return<br />????????????}<br /><br />????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????GPathResult?result?=?slurper.parse(resMergeFile)<br />????????????if?(result.children()?!=?null)?{<br />????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????if?(o?instanceof?Node)?{<br />????????????????????????parseNode(o)<br />????????????????????}<br />????????????????})<br />????????????}<br /><br /><br />????????}?catch?(Throwable?e)?{<br />????????????e.printStackTrace()<br />????????}<br /><br />????}<br /><br />????void?parseNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????if?(node.name()?==?"file"?&&?node.attributes.get("type")?==?"layout")?{<br />????????????String?layoutPath?=?node.attributes.get("path")<br />????????????try?{<br />????????????????XmlSlurper?slurper?=?new?XmlSlurper()<br />????????????????GPathResult?result?=?slurper.parse(layoutPath)<br /><br />????????????????String?viewName?=?result.name();<br />????????????????if?(viewSet.add(viewName))?{<br />????????????????????viewNameListFile.append("${viewName}\n")<br />????????????????}<br />????????????????if?(result.children()?!=?null)?{<br />????????????????????result.childNodes().forEachRemaining({?o?-><br />????????????????????????if?(o?instanceof?Node)?{<br />????????????????????????????parseLayoutNode(o)<br />????????????????????????}<br />????????????????????})<br />????????????????}<br />????????????}?catch?(Throwable?e)?{<br />????????????????e.printStackTrace();<br />????????????}<br /><br />????????}?else?{<br />????????????node.childNodes().forEachRemaining({?o?-><br />????????????????if?(o?instanceof?Node)?{<br />????????????????????parseNode(o)<br />????????????????}<br />????????????})<br />????????}<br /><br />????}<br /><br />????void?parseLayoutNode(Node?node)?{<br />????????if?(node?==?null)?{<br />????????????return<br />????????}<br />????????String?viewName?=?node.name()<br />????????if?(viewSet.add(viewName))?{<br />????????????viewNameListFile.append("${viewName}\n")<br />????????}<br />????????if?(node.childNodes().size()?<br />????????????if?(o?instanceof?Node)?{<br />????????????????parseLayoutNode(o)<br />????????????}<br />????????})<br />????}<br /><br />}<br />
<br />
根目錄:view_opt.gradle
代碼很簡(jiǎn)單,主要就是解析merge.xml,找到所有的布局文件,然后解析xml,最后輸出到build目錄。
我們都把代碼寫(xiě)在位于項目根目錄的view_opt.gradle中,應用在app的build.gradle中:
<br />
apply?from:?rootProject.file('view_opt.gradle')<br />
<br />
然后我們再次運行assembleDebug,輸出:

注意上面我們還有一個(gè)ignoreViewNameList對象,我們過(guò)濾了一些特殊的標簽,比如:“include”、“fragment”、“merge”、“view”,你可以根據輸出結果自行添加。
輸出是:
可以看到是去重View的名字。
在這里提一下,很多同學(xué)看到寫(xiě)gradle腳本都會(huì )感到害怕。其實(shí)很簡(jiǎn)單。你可以只寫(xiě)Java。如果不熟悉語(yǔ)法,可以用Java寫(xiě)。沒(méi)有什么特別的。
在這一點(diǎn)上,我們有所有使用的視圖的名稱(chēng)。
2.apt生成代理類(lèi)
有了所有用到的View的名字,然后我們用apt生成一個(gè)代理類(lèi)和代理方法。
要使用 apt,我們需要創(chuàng )建 3 個(gè)新模塊:
ViewOptAnnotation:存儲注解;
ViewOptProcessor:放注解處理器相關(guān)代碼;
ViewOptApi:放相關(guān)API。
關(guān)于A(yíng)pt的基礎知識就不說(shuō)了。這塊知識太復雜了。你可以自己查一下。后面我會(huì )把demo上傳到github,大家自己看看。
直接看我們的核心Processor類(lèi):
<p>@AutoService(Processor.class)<br />public?class?ViewCreatorProcessor?extends?AbstractProcessor?{<br /><br />????private?Messager?mMessager;<br /><br /><br />????@Override<br />????public?synchronized?void?init(ProcessingEnvironment?processingEnvironment)?{<br />????????super.init(processingEnvironment);<br />????????mMessager?=?processingEnv.getMessager();<br />????}<br /><br />????@Override<br />????public?boolean?process(Set
推薦文章:想寫(xiě)一篇高引用的綜述文章?你需要這樣做!
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-11-16 12:28
這是社科學(xué)術(shù)圈推送的第2307篇文章文章
打開(kāi)topic-experiment-publishing,每一步都需要閱讀文獻,但是這幾個(gè)步驟的文獻并不全面。從解決一個(gè)問(wèn)題的開(kāi)始到解決一個(gè)問(wèn)題的結束,所有的具體文獻都涉及到。要想全面把握整個(gè)題目的走向,寫(xiě)綜述是非常有必要的。而且,經(jīng)過(guò)長(cháng)時(shí)間的相關(guān)研究,寫(xiě)一篇評論文章有以下好處:
在很大程度上可以提高把握整個(gè)學(xué)科方向的能力。通過(guò)詳細、全面的文獻檢索和閱讀,可以全面掌握和了解本課題的發(fā)展脈絡(luò )、研究進(jìn)展和最新成果。
其次,是對自己作品的總結和升華。經(jīng)過(guò)多年的相關(guān)研究,我心中一定有很多的思考和疑問(wèn)。這時(shí)候,大量的閱讀就是對自己固有知識的一個(gè)歸納升華的過(guò)程。寫(xiě)完應該有頓悟的感覺(jué)。
再次,對以后的實(shí)驗研究具有重要的指導作用。寫(xiě)好review之后,通過(guò)對整個(gè)項目方向的了解,知道哪些問(wèn)題已經(jīng)解決,哪些地方還存在問(wèn)題,哪些問(wèn)題是熱點(diǎn)問(wèn)題,哪些是難點(diǎn)骨頭,是制約項目發(fā)展的關(guān)鍵. 這樣,就可以有針對性地設計以后的實(shí)驗。
在小的方面,評論也是一個(gè)文章?,F在國內的評價(jià)都是看個(gè)人成績(jì),總結也是一種發(fā)表文章的方式。另一方面,你可以提高你在同齡人中的地位。一般來(lái)說(shuō),評論 文章 比研究 文章 有更多的引用,從而提高了它們在同行中的知名度。
《文獻檢索準備工作》
在開(kāi)始寫(xiě)評論之前,一個(gè)重要的準備工作就是文獻檢索。審查文章 需要全面,并且必須綜合審查中審查的問(wèn)題。因此,有必要進(jìn)行詳盡的文獻檢索。
這里說(shuō)的全面,并不是說(shuō)下載閱讀幾十年的所有文章。這將是太多的工作。這是一。第二,早期的文章可能已經(jīng)總結過(guò)了。因此,只需尋找一些綜述 文章。這里的綜合指的是更多的關(guān)鍵詞搜索和更多的數據庫搜索。先說(shuō)關(guān)鍵詞,每個(gè)作者對關(guān)鍵詞的偏好不同,在新興領(lǐng)域沒(méi)有統一術(shù)語(yǔ)的時(shí)候,多改幾個(gè)關(guān)鍵詞是很有必要的。除了數據庫,由于各個(gè)數據庫收錄的期刊并不全面,所以重要的搜索工具在這里必不可少。
獲取相關(guān)文獻還有兩個(gè)技巧。一個(gè)是我讀過(guò)的文章中引用的文獻。這個(gè)很容易理解,文末的參考資料就是這樣。另外就是看哪個(gè)文章引用了你讀過(guò)的文章,也是相關(guān)文獻。例如,谷歌學(xué)術(shù)有一個(gè)引用計數,你可以通過(guò)點(diǎn)擊查看哪些文章引用了這篇文章文章。
通過(guò)以上幾種方法,才能找到所有相關(guān)文獻。
“大量閱讀以備不時(shí)之需”
找到所有的文獻之后,下一步就是開(kāi)始閱讀了。
首先,沒(méi)必要全部看完,時(shí)間太長(cháng),工作量太大。但是,應該通讀最近兩年的文章。兩年是對一個(gè)相對熱門(mén)的領(lǐng)域進(jìn)行全面概述 文章 的合理時(shí)間點(diǎn)。近兩年的文章要通讀重點(diǎn),這也是復習的重點(diǎn)。不通讀就知道解決了什么問(wèn)題,如何解決是不夠的;沒(méi)看完就寫(xiě)點(diǎn)評有點(diǎn)不負責任。
兩年前的文章完全沒(méi)必要看,因為你可以從這兩年的文章里的序言里看對這些文章的評論,就可以了也看了評論文章獲取相關(guān)信息。這些文章可以重點(diǎn)閱讀摘要,也有針對某個(gè)問(wèn)題的針對性閱讀。
“如何閱讀文件”
閱讀數百份文件并非易事。如果你只是瀏覽它們,你只能留下一個(gè)大概的印象。一段時(shí)間后或者隨著(zhù)閱讀文檔的增多,這種模糊的印象也會(huì )消失。知識點(diǎn)的記憶是寫(xiě)作和創(chuàng )作的基礎。我不記得如何組織語(yǔ)言。就算查了,也不知道從幾百份文件,幾千頁(yè)里查到哪里去。
我的導師教我要辯證地看書(shū),邊想邊記,不能在書(shū)上亂寫(xiě)。對我來(lái)說(shuō),“好記性不如爛筆頭”更適合我,也適合我的德國同事。他們將文件打印在A(yíng)4紙上,并用熒光筆標出重要的句子??赐旰?,抄寫(xiě)在A(yíng)5紙上,作為選集書(shū)到原稿上。摘錄的才是真正對你有用的知識點(diǎn)。大多數其他 文章 都是伏筆,或者已經(jīng)在你的記憶中?!皠澲攸c(diǎn)+讀書(shū)筆記”可以有效幫助記憶。
雖然一開(kāi)始這樣看很慢,但是隨著(zhù)文檔寫(xiě)了十多二十篇,積累多了,后面的摘錄就會(huì )越來(lái)越少。還有,你的閱讀速度越來(lái)越快。
《文件管理》
下載數百個(gè)文檔后,文檔流水線(xiàn)就成了問(wèn)題。對于文獻管理,Endnote就是這樣一個(gè)專(zhuān)業(yè),它可以有效地組織龐大的文獻,并為您提供全面的信息,如作者、期刊、年份、標題、卷頁(yè)碼和摘要。有些期刊在投稿的時(shí)候需要DOI,Endnote也可以。Endnote在文章的編排中起著(zhù)巨大的作用,是寫(xiě)評論、寫(xiě)論文、寫(xiě)書(shū)的必備工具。
雖然電子版很方便,但我還是更喜歡看紙質(zhì)版。我喜歡把文件打印出來(lái),統一編號(和Endnote一致,Endnote中的Label可以加編號),打孔,放在活頁(yè)夾里。
“文章 的架構”
文學(xué)閱讀是一個(gè)從“說(shuō)得過(guò)去”、“說(shuō)得過(guò)去”、“大是大非”到“無(wú)事生非”的過(guò)程。
我剛開(kāi)始讀書(shū)。由于本人知識有限,之前文章提出的方法和結果對我來(lái)說(shuō)都是全新的,我的知識儲備不足以判斷觀(guān)點(diǎn)。因此,當你剛開(kāi)始閱讀時(shí),你會(huì )完全接受文章中的所有內容,很難提出有問(wèn)題的觀(guān)點(diǎn),你閱讀的任何內容都是“有理有據”的??戳耸似恼?,明白了更多的方法和觀(guān)點(diǎn),有些可能會(huì )有不同的看法。這是因為疑惑會(huì )跳出來(lái),我會(huì )挑剔我讀到的論據,但我不能僅僅依靠一兩篇文章文章就斷定一種方法完全優(yōu)于另一種方法。每種方法都有其優(yōu)缺點(diǎn),從而達到“似是而非”的境界。只有看到足夠多的文章才能做出完整的評價(jià),得到的對比結果也有足夠的論據。這時(shí),已經(jīng)達到了“大是大非”的境界。
一篇評論文章,一部分是綜合別人的作品,一部分是討論自己的觀(guān)點(diǎn)。大是大非只是全面的一步,還應該更進(jìn)一步。通過(guò)對“大是大非”的把握,要能夠發(fā)現新問(wèn)題、新優(yōu)勢或劣勢,提出改進(jìn)方法,對今后的工作和發(fā)展前景提出建議和設想。更有什者,跳出對原實(shí)驗細枝末節的討論,從更高的層次,從原理、方法和系統上進(jìn)行評價(jià)。這當然是非常困難的。所以,大部分的總結文章都是總結而不總結,以至于讀者看完后對過(guò)去有所了解,但對未來(lái)還是茫然無(wú)措。當然,
如果看完之后能做到“大是大非”的經(jīng)濟,就可以開(kāi)始寫(xiě)作了。寫(xiě)作時(shí),首先要搭建一個(gè)框架,對要概括的內容進(jìn)行分類(lèi)、細分。分得越細越好,至少三級,三級標題下可能還有四五級標題。這樣做有以下好處:
@frame 要審查并縮小范圍的問(wèn)題。不要讓你的寫(xiě)作“隨心所欲”,偏離了方向,失去了重心。也容易分清主次,而不是抓眉毛胡子。這不是在寫(xiě)一本書(shū),沒(méi)有太多的空間來(lái)全面討論,所以限制你的評論范圍。
@寫(xiě)作壓力小。一想到寫(xiě)文章文章,就想到“至少寫(xiě)5000字,看100篇文檔”,瞬間壓力倍增,不知從何下手。細分之后,你需要考慮的就是討論某個(gè)方法的某個(gè)參數,只需要一小段文字。它非常容易,可以立即完成,沒(méi)有太大的壓力。
@有順序地。所有要討論的問(wèn)題都列在那里,就像一個(gè)TO-DO LIST,完成一項劃掉一項,一項一項,有條不紊,進(jìn)度非常直觀(guān)。
《寫(xiě)作的小細節》
文章細分成小節后,就可以開(kāi)始完成每個(gè)小節了。下面介紹幾個(gè)非常有效的小技巧。
@注意寫(xiě)作的連貫性:最好一口氣寫(xiě)完,寫(xiě)A的時(shí)候不要想著(zhù)B。這里有兩個(gè)意思。寫(xiě)A題時(shí),找到B題有用的材料;另一個(gè)意思是你在寫(xiě)A題的時(shí)候發(fā)現了B題的錯誤、遺漏或者其他問(wèn)題。這時(shí)候不要停下來(lái),直接用便利貼做筆記(我習慣用ONENOTE做筆記采集材料)。做完筆記,繼續寫(xiě)A題,直到寫(xiě)完。我們回過(guò)頭來(lái)梳理B題。
@二手文獻:為了證明一個(gè)結論,可能需要引用文章主題之外的文獻,或者需要從文獻中引用的文獻中尋找證據,這稱(chēng)為二手文獻。文獻中被他人引用的數據一定要核對,避免錯引文獻、錯引數據。
@圖片處理:一個(gè)是圖片的版權問(wèn)題,這個(gè)不用擔心。當你投稿給期刊時(shí),期刊的編輯會(huì )處理;二是畫(huà)質(zhì)。從其他文檔中提取圖片時(shí),不要使用截圖,因為圖片的分辨率不夠。PDF文件要用PHOTOSHOP打開(kāi),裁剪出需要的圖片,然后保存為T(mén)IFF/JPEG格式。PPT中繪制的圖片,不要使用PPT的“圖片另存為”功能,分辨率太弱。應該說(shuō)是把PPT保存成PDF,然后用PHOTOSHOP處理。
@references 的修改。前期寫(xiě)作時(shí),必須用ENDNOTE對插入WORD的文檔進(jìn)行索引。如果文章已經(jīng)形成,則ENDNOTE已經(jīng)導出了參考文獻,其他作者修改后,需要增刪參考文獻。添加或刪除文檔將更改其他文檔的索引號。這時(shí)候很容易出錯。我用的是下面的方法:在每個(gè)要更改的文檔的索引中加上“*”;在“*”后添加新的參考索引號;使用搜索功能確認每一個(gè)需要改的文檔都用“*”連接(應該出現兩次,比如添加引用121、122應該有兩個(gè),121*122、122*123,即121變成 122,122 變成 123);刪除“*”和之前的索引號。
@英語(yǔ)句子,短句勝于長(cháng)句。被人理解才是最重要的。簡(jiǎn)短的句子很容易理解。太多的定語(yǔ)從句會(huì )讓人頭暈目眩。
“文章 的亮點(diǎn)”
一篇文章文章必須要有一些“干貨”,才能被更多人引用。所以在你寫(xiě)之前,看看你下載的 文章 的引用。哪個(gè) 文章 獲得了最多的引用?為什么?
從我個(gè)人引用文章的習慣來(lái)看,下面的文章會(huì )被引用:
@第一篇文章:該領(lǐng)域的開(kāi)創(chuàng )性工作,不引用是不合理的;
@milestone文章:文章達到最高、最高、最大、最快等,或者突出的進(jìn)步,應該注明;
@正在討論核心問(wèn)題。
另外,我也喜歡引用結論性的句子,比如某項技術(shù)的優(yōu)點(diǎn)……;以及量化的句子,比如70%的文章目前都采用了某種方法。
如果你能在你的評論中提供這些內容,那肯定會(huì )增加其他引用的數量。前三個(gè)干貨是研究型文章的東西,后兩個(gè)就不簡(jiǎn)單了。第一個(gè)需要你自己總結,第二個(gè)需要大量的統計。
分享文章:文章偽原創(chuàng )檢查(在線(xiàn)文章偽原創(chuàng ))
本文閱讀提示:在線(xiàn)文章偽原創(chuàng ),文章偽原創(chuàng )軟件移動(dòng)版,文章采集偽原創(chuàng )
文章偽原創(chuàng )檢查工具在線(xiàn) zoding(文章偽原創(chuàng )),4 個(gè)經(jīng)典 SEO 偽原創(chuàng )|谷歌搜索引擎:pR劫持,5個(gè)常規工件
網(wǎng)站共同點(diǎn)和偽原創(chuàng )是SEO偽項目,1支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),2并支持多種快速替換的SEO偽原創(chuàng )
搜索引擎優(yōu)化
偽原創(chuàng )檢測工具偽原創(chuàng ),3并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),1支持圖文組合的快速偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,1支持圖文組合的多版本偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,2支持重大修改
SEO偽原創(chuàng ),3大偽原創(chuàng )成本測試
SEO偽原創(chuàng )文章工具,1個(gè)搜索引擎與文章庫集成
SEO 偽原創(chuàng )文章工具,1 個(gè)集成關(guān)鍵詞
SEO偽原創(chuàng )文章工具,1個(gè)集成關(guān)鍵詞,搜索量關(guān)鍵詞
SEO偽原創(chuàng )文章工具,2密度的組織關(guān)鍵詞
SEO偽原創(chuàng )文章工具,3.優(yōu)化網(wǎng)站內部鏈
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化:平面結構。輔助導航。痕跡導航。子導航。野外站。特殊優(yōu)化2.內容頁(yè)面優(yōu)化:(優(yōu)化最新文章。推薦文章。熱門(mén)文章 3頁(yè)面加載速度(秒) 4.頁(yè)面代碼壓縮和簡(jiǎn)化
SEO偽原創(chuàng )文章工具,2個(gè)面包屑來(lái)指導頁(yè)面。 301重定向第五代。圖像標簽 6.網(wǎng)站 TDK寫(xiě)作 7.關(guān)鍵詞密度控制8.在單詞標簽周?chē)褂藐P(guān)鍵字 9.粗體關(guān)鍵字等 10.合理使用NO11。分頁(yè)代碼優(yōu)化SEO 偽原創(chuàng )文章工具
、3SEO 偽原創(chuàng )文章工具站點(diǎn)地圖設置
SEO 偽原創(chuàng )文章工具,1 網(wǎng)站結構優(yōu)化 2.網(wǎng)站地圖優(yōu)化提交。主動(dòng)推送。自動(dòng)推送)。
SEO偽原創(chuàng )文章工具,4個(gè)優(yōu)化的關(guān)鍵詞布局
SEO偽原創(chuàng )文章工具,1選擇和識別核心關(guān)鍵詞。長(cháng)尾關(guān)鍵詞延伸。關(guān)鍵詞工具詞挖掘研究。競爭對手網(wǎng)站關(guān)鍵詞分享研究成果
搜索引擎優(yōu)化偽原創(chuàng )文章工具,
相關(guān)文章 查看全部
推薦文章:想寫(xiě)一篇高引用的綜述文章?你需要這樣做!
這是社科學(xué)術(shù)圈推送的第2307篇文章文章
打開(kāi)topic-experiment-publishing,每一步都需要閱讀文獻,但是這幾個(gè)步驟的文獻并不全面。從解決一個(gè)問(wèn)題的開(kāi)始到解決一個(gè)問(wèn)題的結束,所有的具體文獻都涉及到。要想全面把握整個(gè)題目的走向,寫(xiě)綜述是非常有必要的。而且,經(jīng)過(guò)長(cháng)時(shí)間的相關(guān)研究,寫(xiě)一篇評論文章有以下好處:
在很大程度上可以提高把握整個(gè)學(xué)科方向的能力。通過(guò)詳細、全面的文獻檢索和閱讀,可以全面掌握和了解本課題的發(fā)展脈絡(luò )、研究進(jìn)展和最新成果。
其次,是對自己作品的總結和升華。經(jīng)過(guò)多年的相關(guān)研究,我心中一定有很多的思考和疑問(wèn)。這時(shí)候,大量的閱讀就是對自己固有知識的一個(gè)歸納升華的過(guò)程。寫(xiě)完應該有頓悟的感覺(jué)。
再次,對以后的實(shí)驗研究具有重要的指導作用。寫(xiě)好review之后,通過(guò)對整個(gè)項目方向的了解,知道哪些問(wèn)題已經(jīng)解決,哪些地方還存在問(wèn)題,哪些問(wèn)題是熱點(diǎn)問(wèn)題,哪些是難點(diǎn)骨頭,是制約項目發(fā)展的關(guān)鍵. 這樣,就可以有針對性地設計以后的實(shí)驗。
在小的方面,評論也是一個(gè)文章?,F在國內的評價(jià)都是看個(gè)人成績(jì),總結也是一種發(fā)表文章的方式。另一方面,你可以提高你在同齡人中的地位。一般來(lái)說(shuō),評論 文章 比研究 文章 有更多的引用,從而提高了它們在同行中的知名度。
《文獻檢索準備工作》
在開(kāi)始寫(xiě)評論之前,一個(gè)重要的準備工作就是文獻檢索。審查文章 需要全面,并且必須綜合審查中審查的問(wèn)題。因此,有必要進(jìn)行詳盡的文獻檢索。
這里說(shuō)的全面,并不是說(shuō)下載閱讀幾十年的所有文章。這將是太多的工作。這是一。第二,早期的文章可能已經(jīng)總結過(guò)了。因此,只需尋找一些綜述 文章。這里的綜合指的是更多的關(guān)鍵詞搜索和更多的數據庫搜索。先說(shuō)關(guān)鍵詞,每個(gè)作者對關(guān)鍵詞的偏好不同,在新興領(lǐng)域沒(méi)有統一術(shù)語(yǔ)的時(shí)候,多改幾個(gè)關(guān)鍵詞是很有必要的。除了數據庫,由于各個(gè)數據庫收錄的期刊并不全面,所以重要的搜索工具在這里必不可少。
獲取相關(guān)文獻還有兩個(gè)技巧。一個(gè)是我讀過(guò)的文章中引用的文獻。這個(gè)很容易理解,文末的參考資料就是這樣。另外就是看哪個(gè)文章引用了你讀過(guò)的文章,也是相關(guān)文獻。例如,谷歌學(xué)術(shù)有一個(gè)引用計數,你可以通過(guò)點(diǎn)擊查看哪些文章引用了這篇文章文章。
通過(guò)以上幾種方法,才能找到所有相關(guān)文獻。
“大量閱讀以備不時(shí)之需”
找到所有的文獻之后,下一步就是開(kāi)始閱讀了。
首先,沒(méi)必要全部看完,時(shí)間太長(cháng),工作量太大。但是,應該通讀最近兩年的文章。兩年是對一個(gè)相對熱門(mén)的領(lǐng)域進(jìn)行全面概述 文章 的合理時(shí)間點(diǎn)。近兩年的文章要通讀重點(diǎn),這也是復習的重點(diǎn)。不通讀就知道解決了什么問(wèn)題,如何解決是不夠的;沒(méi)看完就寫(xiě)點(diǎn)評有點(diǎn)不負責任。

兩年前的文章完全沒(méi)必要看,因為你可以從這兩年的文章里的序言里看對這些文章的評論,就可以了也看了評論文章獲取相關(guān)信息。這些文章可以重點(diǎn)閱讀摘要,也有針對某個(gè)問(wèn)題的針對性閱讀。
“如何閱讀文件”
閱讀數百份文件并非易事。如果你只是瀏覽它們,你只能留下一個(gè)大概的印象。一段時(shí)間后或者隨著(zhù)閱讀文檔的增多,這種模糊的印象也會(huì )消失。知識點(diǎn)的記憶是寫(xiě)作和創(chuàng )作的基礎。我不記得如何組織語(yǔ)言。就算查了,也不知道從幾百份文件,幾千頁(yè)里查到哪里去。
我的導師教我要辯證地看書(shū),邊想邊記,不能在書(shū)上亂寫(xiě)。對我來(lái)說(shuō),“好記性不如爛筆頭”更適合我,也適合我的德國同事。他們將文件打印在A(yíng)4紙上,并用熒光筆標出重要的句子??赐旰?,抄寫(xiě)在A(yíng)5紙上,作為選集書(shū)到原稿上。摘錄的才是真正對你有用的知識點(diǎn)。大多數其他 文章 都是伏筆,或者已經(jīng)在你的記憶中?!皠澲攸c(diǎn)+讀書(shū)筆記”可以有效幫助記憶。
雖然一開(kāi)始這樣看很慢,但是隨著(zhù)文檔寫(xiě)了十多二十篇,積累多了,后面的摘錄就會(huì )越來(lái)越少。還有,你的閱讀速度越來(lái)越快。
《文件管理》
下載數百個(gè)文檔后,文檔流水線(xiàn)就成了問(wèn)題。對于文獻管理,Endnote就是這樣一個(gè)專(zhuān)業(yè),它可以有效地組織龐大的文獻,并為您提供全面的信息,如作者、期刊、年份、標題、卷頁(yè)碼和摘要。有些期刊在投稿的時(shí)候需要DOI,Endnote也可以。Endnote在文章的編排中起著(zhù)巨大的作用,是寫(xiě)評論、寫(xiě)論文、寫(xiě)書(shū)的必備工具。
雖然電子版很方便,但我還是更喜歡看紙質(zhì)版。我喜歡把文件打印出來(lái),統一編號(和Endnote一致,Endnote中的Label可以加編號),打孔,放在活頁(yè)夾里。
“文章 的架構”
文學(xué)閱讀是一個(gè)從“說(shuō)得過(guò)去”、“說(shuō)得過(guò)去”、“大是大非”到“無(wú)事生非”的過(guò)程。
我剛開(kāi)始讀書(shū)。由于本人知識有限,之前文章提出的方法和結果對我來(lái)說(shuō)都是全新的,我的知識儲備不足以判斷觀(guān)點(diǎn)。因此,當你剛開(kāi)始閱讀時(shí),你會(huì )完全接受文章中的所有內容,很難提出有問(wèn)題的觀(guān)點(diǎn),你閱讀的任何內容都是“有理有據”的??戳耸似恼?,明白了更多的方法和觀(guān)點(diǎn),有些可能會(huì )有不同的看法。這是因為疑惑會(huì )跳出來(lái),我會(huì )挑剔我讀到的論據,但我不能僅僅依靠一兩篇文章文章就斷定一種方法完全優(yōu)于另一種方法。每種方法都有其優(yōu)缺點(diǎn),從而達到“似是而非”的境界。只有看到足夠多的文章才能做出完整的評價(jià),得到的對比結果也有足夠的論據。這時(shí),已經(jīng)達到了“大是大非”的境界。
一篇評論文章,一部分是綜合別人的作品,一部分是討論自己的觀(guān)點(diǎn)。大是大非只是全面的一步,還應該更進(jìn)一步。通過(guò)對“大是大非”的把握,要能夠發(fā)現新問(wèn)題、新優(yōu)勢或劣勢,提出改進(jìn)方法,對今后的工作和發(fā)展前景提出建議和設想。更有什者,跳出對原實(shí)驗細枝末節的討論,從更高的層次,從原理、方法和系統上進(jìn)行評價(jià)。這當然是非常困難的。所以,大部分的總結文章都是總結而不總結,以至于讀者看完后對過(guò)去有所了解,但對未來(lái)還是茫然無(wú)措。當然,
如果看完之后能做到“大是大非”的經(jīng)濟,就可以開(kāi)始寫(xiě)作了。寫(xiě)作時(shí),首先要搭建一個(gè)框架,對要概括的內容進(jìn)行分類(lèi)、細分。分得越細越好,至少三級,三級標題下可能還有四五級標題。這樣做有以下好處:
@frame 要審查并縮小范圍的問(wèn)題。不要讓你的寫(xiě)作“隨心所欲”,偏離了方向,失去了重心。也容易分清主次,而不是抓眉毛胡子。這不是在寫(xiě)一本書(shū),沒(méi)有太多的空間來(lái)全面討論,所以限制你的評論范圍。
@寫(xiě)作壓力小。一想到寫(xiě)文章文章,就想到“至少寫(xiě)5000字,看100篇文檔”,瞬間壓力倍增,不知從何下手。細分之后,你需要考慮的就是討論某個(gè)方法的某個(gè)參數,只需要一小段文字。它非常容易,可以立即完成,沒(méi)有太大的壓力。
@有順序地。所有要討論的問(wèn)題都列在那里,就像一個(gè)TO-DO LIST,完成一項劃掉一項,一項一項,有條不紊,進(jìn)度非常直觀(guān)。

《寫(xiě)作的小細節》
文章細分成小節后,就可以開(kāi)始完成每個(gè)小節了。下面介紹幾個(gè)非常有效的小技巧。
@注意寫(xiě)作的連貫性:最好一口氣寫(xiě)完,寫(xiě)A的時(shí)候不要想著(zhù)B。這里有兩個(gè)意思。寫(xiě)A題時(shí),找到B題有用的材料;另一個(gè)意思是你在寫(xiě)A題的時(shí)候發(fā)現了B題的錯誤、遺漏或者其他問(wèn)題。這時(shí)候不要停下來(lái),直接用便利貼做筆記(我習慣用ONENOTE做筆記采集材料)。做完筆記,繼續寫(xiě)A題,直到寫(xiě)完。我們回過(guò)頭來(lái)梳理B題。
@二手文獻:為了證明一個(gè)結論,可能需要引用文章主題之外的文獻,或者需要從文獻中引用的文獻中尋找證據,這稱(chēng)為二手文獻。文獻中被他人引用的數據一定要核對,避免錯引文獻、錯引數據。
@圖片處理:一個(gè)是圖片的版權問(wèn)題,這個(gè)不用擔心。當你投稿給期刊時(shí),期刊的編輯會(huì )處理;二是畫(huà)質(zhì)。從其他文檔中提取圖片時(shí),不要使用截圖,因為圖片的分辨率不夠。PDF文件要用PHOTOSHOP打開(kāi),裁剪出需要的圖片,然后保存為T(mén)IFF/JPEG格式。PPT中繪制的圖片,不要使用PPT的“圖片另存為”功能,分辨率太弱。應該說(shuō)是把PPT保存成PDF,然后用PHOTOSHOP處理。
@references 的修改。前期寫(xiě)作時(shí),必須用ENDNOTE對插入WORD的文檔進(jìn)行索引。如果文章已經(jīng)形成,則ENDNOTE已經(jīng)導出了參考文獻,其他作者修改后,需要增刪參考文獻。添加或刪除文檔將更改其他文檔的索引號。這時(shí)候很容易出錯。我用的是下面的方法:在每個(gè)要更改的文檔的索引中加上“*”;在“*”后添加新的參考索引號;使用搜索功能確認每一個(gè)需要改的文檔都用“*”連接(應該出現兩次,比如添加引用121、122應該有兩個(gè),121*122、122*123,即121變成 122,122 變成 123);刪除“*”和之前的索引號。
@英語(yǔ)句子,短句勝于長(cháng)句。被人理解才是最重要的。簡(jiǎn)短的句子很容易理解。太多的定語(yǔ)從句會(huì )讓人頭暈目眩。
“文章 的亮點(diǎn)”
一篇文章文章必須要有一些“干貨”,才能被更多人引用。所以在你寫(xiě)之前,看看你下載的 文章 的引用。哪個(gè) 文章 獲得了最多的引用?為什么?
從我個(gè)人引用文章的習慣來(lái)看,下面的文章會(huì )被引用:
@第一篇文章:該領(lǐng)域的開(kāi)創(chuàng )性工作,不引用是不合理的;
@milestone文章:文章達到最高、最高、最大、最快等,或者突出的進(jìn)步,應該注明;
@正在討論核心問(wèn)題。
另外,我也喜歡引用結論性的句子,比如某項技術(shù)的優(yōu)點(diǎn)……;以及量化的句子,比如70%的文章目前都采用了某種方法。
如果你能在你的評論中提供這些內容,那肯定會(huì )增加其他引用的數量。前三個(gè)干貨是研究型文章的東西,后兩個(gè)就不簡(jiǎn)單了。第一個(gè)需要你自己總結,第二個(gè)需要大量的統計。
分享文章:文章偽原創(chuàng )檢查(在線(xiàn)文章偽原創(chuàng ))
本文閱讀提示:在線(xiàn)文章偽原創(chuàng ),文章偽原創(chuàng )軟件移動(dòng)版,文章采集偽原創(chuàng )
文章偽原創(chuàng )檢查工具在線(xiàn) zoding(文章偽原創(chuàng )),4 個(gè)經(jīng)典 SEO 偽原創(chuàng )|谷歌搜索引擎:pR劫持,5個(gè)常規工件
網(wǎng)站共同點(diǎn)和偽原創(chuàng )是SEO偽項目,1支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多個(gè)平臺的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),2并支持多種快速替換的SEO偽原創(chuàng )
搜索引擎優(yōu)化
偽原創(chuàng )檢測工具偽原創(chuàng ),3并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具在線(xiàn)偽原創(chuàng ),1支持圖文組合的快速偽原創(chuàng )

SEO偽原創(chuàng )檢測工具偽原創(chuàng ),1并支持多種快速替換的SEO偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,1支持圖文組合的多版本偽原創(chuàng )
SEO偽原創(chuàng )檢測工具,2支持重大修改
SEO偽原創(chuàng ),3大偽原創(chuàng )成本測試
SEO偽原創(chuàng )文章工具,1個(gè)搜索引擎與文章庫集成
SEO 偽原創(chuàng )文章工具,1 個(gè)集成關(guān)鍵詞
SEO偽原創(chuàng )文章工具,1個(gè)集成關(guān)鍵詞,搜索量關(guān)鍵詞
SEO偽原創(chuàng )文章工具,2密度的組織關(guān)鍵詞
SEO偽原創(chuàng )文章工具,3.優(yōu)化網(wǎng)站內部鏈

SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化
SEO偽原創(chuàng )文章工具,1網(wǎng)站結構優(yōu)化:平面結構。輔助導航。痕跡導航。子導航。野外站。特殊優(yōu)化2.內容頁(yè)面優(yōu)化:(優(yōu)化最新文章。推薦文章。熱門(mén)文章 3頁(yè)面加載速度(秒) 4.頁(yè)面代碼壓縮和簡(jiǎn)化
SEO偽原創(chuàng )文章工具,2個(gè)面包屑來(lái)指導頁(yè)面。 301重定向第五代。圖像標簽 6.網(wǎng)站 TDK寫(xiě)作 7.關(guān)鍵詞密度控制8.在單詞標簽周?chē)褂藐P(guān)鍵字 9.粗體關(guān)鍵字等 10.合理使用NO11。分頁(yè)代碼優(yōu)化SEO 偽原創(chuàng )文章工具
、3SEO 偽原創(chuàng )文章工具站點(diǎn)地圖設置
SEO 偽原創(chuàng )文章工具,1 網(wǎng)站結構優(yōu)化 2.網(wǎng)站地圖優(yōu)化提交。主動(dòng)推送。自動(dòng)推送)。
SEO偽原創(chuàng )文章工具,4個(gè)優(yōu)化的關(guān)鍵詞布局
SEO偽原創(chuàng )文章工具,1選擇和識別核心關(guān)鍵詞。長(cháng)尾關(guān)鍵詞延伸。關(guān)鍵詞工具詞挖掘研究。競爭對手網(wǎng)站關(guān)鍵詞分享研究成果
搜索引擎優(yōu)化偽原創(chuàng )文章工具,
相關(guān)文章