解讀:源碼剖析 - 公眾號采集閱讀器 Liuli
優(yōu)采云 發(fā)布時(shí)間: 2022-10-24 19:24解讀:源碼剖析 - 公眾號采集閱讀器 Liuli
介紹
偶然發(fā)現了琉璃這個(gè)項目,項目Github:
看了它的文章,發(fā)現琉璃是用Python實(shí)現的,所以打算簡(jiǎn)單看一下它的實(shí)現細節,老規矩,看項目,先把好奇的點(diǎn)寫(xiě)下來(lái):
是的,我對這兩點(diǎn)很感興趣。經(jīng)過(guò)一番閱讀,關(guān)于好奇心 1、其實(shí)沒(méi)有人實(shí)現過(guò)漂亮的PC軟件界面。琉璃只是采集,然后推送內容,所以這篇文章的重點(diǎn),就看怎么了采集公眾號文章,另外,在閱讀的過(guò)程中,我發(fā)現LiuLi還用了一個(gè)簡(jiǎn)單的方法來(lái)識別文章是不是廣告文章,這個(gè)也很有意思,也記錄一下。
公眾號文章采集
琉璃基于搜狗微信()對公眾號文章進(jìn)行采集,實(shí)現了兩種方法:
我們可以通過(guò)相應的配置文件來(lái)控制琉璃使用哪種方式執行文章采集,它使用ruia默認的方式執行采集。
琉璃將功能劃分為多個(gè)模塊,然后通過(guò)調度器調度不同的模塊。調度器啟動(dòng)方法代碼如下:
#?src/liuli_schedule.py<br /><br />def?start(ll_config_name:?str?=?""):<br />????"""調度啟動(dòng)函數<br /><br />????Args:<br />????????task_config?(dict):?調度任務(wù)配置<br />????"""<br />????if?not?ll_config_name:<br />????????freeze_support()<br /><br />????????#?默認啟動(dòng)?liuli_config?目錄下所有配置<br />????????ll_config_name_list?=?[]<br />????????for?each_file?in?os.listdir(Config.LL_CONFIG_DIR):<br />????????????if?each_file.endswith("json"):<br />????????????????#?加入啟動(dòng)列表<br />????????????????ll_config_name_list.append(each_file.replace(".json",?""))<br />????????#?進(jìn)程池<br />????????p?=?Pool(len(ll_config_name_list))<br />????????for?each_ll_config_name?in?ll_config_name_list:<br />????????????LOGGER.info(f"Task?{each_ll_config_name}?register?successfully!")<br />????????????p.apply_async(run_liuli_schedule,?args=(each_ll_config_name,))<br />????????p.close()<br />????????p.join()<br /><br />????else:<br />????????run_liuli_schedule(ll_config_name)<br />
從代碼中可以看出,調度器會(huì )啟動(dòng)Python進(jìn)程池,然后在其中添加run_liuli_schedule異步任務(wù)。在這個(gè)異步任務(wù)中,會(huì )執行run_liuli_task方法,這是一個(gè)完整的任務(wù)流程。代碼如下:
def?run_liuli_task(ll_config:?dict):<br />????"""執行調度任務(wù)<br /><br />????Args:<br />????????ll_config?(dict):?Liuli?任務(wù)配置<br />????"""<br />????#?文章源,?用于基礎查詢(xún)條件<br />????doc_source:?str?=?ll_config["doc_source"]<br />????basic_filter?=?{"basic_filter":?{"doc_source":?doc_source}}<br />????#?采集器配置<br />????collector_conf:?dict?=?ll_config["collector"]<br />????#?處理器配置<br />????processor_conf:?dict?=?ll_config["processor"]<br />????#?分發(fā)器配置<br />????sender_conf:?dict?=?ll_config["sender"]<br />????sender_conf.update(basic_filter)<br />????#?備份器配置<br />????backup_conf:?dict?=?ll_config["backup"]<br />????backup_conf.update(basic_filter)<br /><br />????#?采集器執行<br />????LOGGER.info("采集器開(kāi)始執行!")<br />????for?collect_type,?collect_config?in?collector_conf.items():<br />????????collect_factory(collect_type,?collect_config)<br />????LOGGER.info("采集器執行完畢!")<br />????#?采集器執行<br />????LOGGER.info("處理器(after_collect):?開(kāi)始執行!")<br />????for?each?in?processor_conf["after_collect"]:<br />????????func_name?=?each.pop("func")<br />????????#?注入查詢(xún)條件<br />????????each.update(basic_filter)<br />????????LOGGER.info(f"處理器(after_collect):?{func_name}?正在執行...")<br />????????processor_dict[func_name](**each)<br />????LOGGER.info("處理器(after_collect):?執行完畢!")<br />????#?分發(fā)器執行<br />????LOGGER.info("分發(fā)器開(kāi)始執行!")<br />????send_doc(sender_conf)<br />????LOGGER.info("分發(fā)器執行完畢!")<br />????#?備份器執行<br />????LOGGER.info("備份器開(kāi)始執行!")<br />????backup_doc(backup_conf)<br />????LOGGER.info("備份器執行完畢!")<br />
從 run_liuli_task 方法中,需要執行一個(gè) Liuli 任務(wù):
關(guān)于琉璃的功能大家可以閱讀作者自己的文章:,這里我們只關(guān)注公眾號采集的邏輯。
因為ruia和playwright實(shí)現的采集器有兩種不同的方式,使用哪一種由配置文件決定,然后通過(guò)import_module方法動(dòng)態(tài)導入對應的模塊,然后運行模塊的run方法,從而實(shí)現文章的公眾號采集,相關(guān)代碼如下:
def?collect_factory(collect_type:?str,?collect_config:?dict)?->?bool:<br />????"""<br />????采集器工廠(chǎng)函數<br />????:param?collect_type:?采集器類(lèi)型<br />????:param?collect_config:?采集器配置<br />????:return:<br />????"""<br />????collect_status?=?False<br />????try:<br />????????#?import_module方法動(dòng)態(tài)載入具體的采集模塊<br />????????collect_module?=?import_module(f"src.collector.{collect_type}")<br />????????collect_status?=?collect_module.run(collect_config)<br />????except?ModuleNotFoundError:<br />????????LOGGER.error(f"采集器類(lèi)型不存在?{collect_type}?-?{collect_config}")<br />????except?Exception?as?e:<br />????????LOGGER.error(f"采集器執行出錯?{collect_type}?-?{collect_config}?-?{e}")<br />????return?collect_status<br />
編劇采集模塊實(shí)現
Playwright 是微軟出品的自動(dòng)化庫。它類(lèi)似于硒。它定位于網(wǎng)頁(yè)測試,但也被人們用來(lái)獲取網(wǎng)頁(yè)信息。當然,一些前端的反爬措施,編劇是無(wú)法突破的。
與selenium相比,playwright支持python的async,性能有所提升(但還是比不上直接請求)。下面是獲取公眾號下最新文章的一些邏輯(完整代碼太長(cháng)):
async?def?playwright_main(wechat_name:?str):<br />????"""利用?playwright?獲取公眾號元信息,輸出數據格式見(jiàn)上方<br />????Args:<br />????????wechat_name?([str]):?公眾號名稱(chēng)<br />????"""<br />????wechat_data?=?{}<br />????try:<br />????????async?with?async_playwright()?as?p:<br />????????????#?browser?=?await?p.chromium.launch(headless=False)<br />????????????browser?=?await?p.chromium.launch()<br />????????????context?=?await?browser.new_context(user_agent=Config.SPIDER_UA)<br />????????????page?=?await?context.new_page()<br />????????????#?進(jìn)行公眾號檢索<br />????????????await?page.goto("https://weixin.sogou.com/")<br />????????????await?page.wait_for_load_state()<br />????????????await?page.click('input[name="query"]')<br />????????????await?page.fill('input[name="query"]',?wechat_name)<br />????????????await?asyncio.sleep(1)<br />????????????await?page.click("text=搜公眾號")<br />????????????await?page.wait_for_load_state()<br />
從上面的代碼可以看出,playwright的用法和selenium很相似,通過(guò)自動(dòng)化用戶(hù)操作網(wǎng)站的過(guò)程可以得到對應的數據。
ruia 采集 模塊實(shí)現
ruia 是一個(gè)輕量級的 Python 異步爬蟲(chóng)框架。因為它比較輕量級,所以我也把它的代碼看成了下一篇文章文章的內容。
它的用法有點(diǎn)像scrapy。需要定義一個(gè)繼承自ruia.Spider的子類(lèi),然后調用start方法實(shí)現對目標網(wǎng)站的請求,然后ruia會(huì )自動(dòng)調用parse方法解析網(wǎng)頁(yè)內容。我們來(lái)看看具體的代碼,首先是入口邏輯:
def?run(collect_config:?dict):<br />????"""微信公眾號文章抓取爬蟲(chóng)<br /><br />????Args:<br />????????collect_config?(dict,?optional):?采集器配置<br />????"""<br />????s_nums?=?0<br />????wechat_list?=?collect_config["wechat_list"]<br />????delta_time?=?collect_config.get("delta_time",?5)<br />????for?wechat_name?in?wechat_list:<br />????????SGWechatSpider.wechat_name?=?wechat_name<br />????????SGWechatSpider.request_config?=?{<br />????????????"RETRIES":?3,<br />????????????"DELAY":?delta_time,<br />????????????"TIMEOUT":?20,<br />????????}<br />????????sg_url?=?f"https://weixin.sogou.com/weixin?type=1&query={wechat_name}&ie=utf8&s_from=input&_sug_=n&_sug_type_="<br />????????SGWechatSpider.start_urls?=?[sg_url]<br />????????try:<br />????????????#?啟動(dòng)爬蟲(chóng)<br />????????????SGWechatSpider.start(middleware=ua_middleware)<br />????????????s_nums?+=?1<br />????????except?Exception?as?e:<br />????????????err_msg?=?f"?公眾號->{wechat_name}?文章更新失敗!?錯誤信息:?{e}"<br />????????????LOGGER.error(err_msg)<br /><br />????msg?=?f"?微信公眾號文章更新完畢({s_nums}/{len(wechat_list)})!"<br />????LOGGER.info(msg)<br />
上面代碼中,爬蟲(chóng)是通過(guò)SGWechatSpider.start(middleware=ua_middleware)啟動(dòng)的,它會(huì )自動(dòng)請求start_urls的url,然后回調parse方法。parse方法的代碼如下:
????async?def?parse(self,?response:?Response):<br />????????"""解析公眾號原始鏈接數據"""<br />????????html?=?await?response.text()<br />????????item_list?=?[]<br />????????async?for?item?in?SGWechatItem.get_items(html=html):<br />????????????if?item.wechat_name?==?self.wechat_name:<br />????????????????item_list.append(item)<br />????????????????yield?self.request(<br />????????????????????url=item.latest_href,<br />????????????????????metadata=item.results,<br />????????????????????#?下一個(gè)回調方法<br />????????????????????callback=self.parse_real_wechat_url,<br />????????????????)<br />????????????????break<br />
在parse方法中,通過(guò)self.request請求一個(gè)新的url,然后回調self.parse_real_wechat_url方法。一切都與scrapy如此相似。
至此采集模塊的閱讀就結束了(代碼中還涉及到一些簡(jiǎn)單的數據清洗,本文不做討論),沒(méi)有特別復雜的部分,從代碼來(lái)看,作者沒(méi)被派去做反爬邏輯處理,搜狗微信沒(méi)反爬?
廣告文章標識
然后看廣告文章的識別,琉璃還是會(huì )采集為廣告文章,經(jīng)過(guò)采集,在文章處理模塊中,廣告文章標記出來(lái),先分析廣告文章標記的入口邏輯,回到liuli_schedule.py的run_lili_task方法,注意進(jìn)程的邏輯(文章處理模塊) ,代碼如下:
????LOGGER.info("處理器(after_collect):?開(kāi)始執行!")<br />????for?each?in?processor_conf["after_collect"]:<br />????????func_name?=?each.pop("func")<br />????????#?注入查詢(xún)條件<br />????????each.update(basic_filter)<br />????????LOGGER.info(f"處理器(after_collect):?{func_name}?正在執行...")<br />????????processor_dict[func_name](**each)<br />????LOGGER.info("處理器(after_collect):?執行完畢!")<br />
從上面的代碼可以看出,處理器的主要邏輯是processor_dict字典中的方法。字典的定義路徑是 src/processor/__init__.py。代碼如下:
from?.rss_utils?import?to_rss<br />from?.text_utils?import?(<br />????ad_marker,<br />????extract_core_html,<br />????extract_keyword_list,<br />????html_to_text_h2t,<br />????str_replace,<br />)<br /><br />processor_dict?=?{<br />????"to_rss":?to_rss,<br />????"ad_marker":?ad_marker,<br />????"str_replace":?str_replace,<br />}<br />
ad_marker 方法是一種識別文章 是否是廣告文章 的方法。其實(shí)寫(xiě)的有點(diǎn)繞。核心邏輯是計算當前文章和采集到廣告文章構造詞頻向量的余弦值,判斷余弦值的大小判斷是否為廣告文章,簡(jiǎn)單看一下相關(guān)邏輯。
在ad_marker方法中會(huì )調用model_predict_factory方法,傳入當前文章的標題、文章的內容和分類(lèi)的cos_value。相關(guān)代碼如下(已清理上代碼,只顯示所需的部分):
def?ad_marker(<br />????cos_value:?float?=?0.6,<br />????is_force=False,<br />????basic_filter={},<br />????**kwargs,<br />):<br />????#?基于余弦相似度<br />????cos_model_resp?=?model_predict_factory(<br />????????model_name="cos",<br />????????model_path="",<br />????????input_dict={"text":?doc_name?+?doc_keywords,?"cos_value":?cos_value},<br />????????#?input_dict={"text":?doc_name,?"cos_value":?Config.COS_VALUE},<br />????).to_dict()<br />
cos_value為0.6,即如果計算出當前文章與廣告文章的余弦值大于等于0.6,則認為當前文章為廣告文章,其最終預測邏輯在classifier/model_base/cos_model_loader.py的predict方法中,代碼如下:
def?predict(self,?text:?str,?cos_value:?float?=?0.8)?->?dict:<br />????"""<br />????對文本相似度進(jìn)行預測<br />????:param?text:?文本<br />????:param?cos_value:?閾值?默認是0.9<br />????:return:<br />????"""<br />????max_pro,?result?=?0.0,?0<br />????for?each?in?self.train_data:<br />????????#?余弦值具體的運算邏輯<br />????????cos?=?CosineSimilarity(self.process_text(text),?each)<br />????????res_dict?=?cos.calculate()<br />????????value?=?res_dict["value"]<br />????????#?大于等于cos_value,就返回1,則表示當前的文章是廣告文章<br />????????result?=?1?if?value?>=?cos_value?else?0<br />????????max_pro?=?value?if?value?>?max_pro?else?max_pro<br />????????if?result?==?1:<br />????????????break<br /><br />????return?{"result":?result,?"value":?max_pro}<br />
余弦值的具體操作邏輯在CosineSimilarity的calculate方法中,都是和數學(xué)有關(guān)的,我就不看了。核心是判斷當前文章與廣告文章的相似度??梢酝ㄟ^(guò)TFIDF、文本聚類(lèi)等算法來(lái)完成,相關(guān)庫幾行代碼就可以搞定(所以感覺(jué)就寫(xiě)在這里)。
剩下的可以參考邏輯結束
琉璃是一個(gè)不錯的學(xué)習項目,下一部分文章,一起來(lái)學(xué)習r(shí)uia Python輕量級異步爬蟲(chóng)框架的代碼。
最新信息:短視頻seo霸屏全網(wǎng),采集精準實(shí)時(shí)有效數據私信截流-運營(yíng)解決方案
4.同一城市是否有視頻和QR碼流行?
在同一個(gè)城市,我們會(huì )直接給你一個(gè)完整的系統,和我們之前的客人一起刷一個(gè)模式,一個(gè)觸摸,這個(gè)問(wèn)題不用說(shuō)了
5. 如何編輯短視頻搜索引擎優(yōu)化?您使用軟件嗎?我發(fā)布了一個(gè),發(fā)布后我看不到它,這是怎么回事?
目前,系統中有編輯短視頻的功能。如果編輯視頻軟件,可以使用剪輯PR來(lái)編輯那些,操作非常簡(jiǎn)單。發(fā)送后我看不到,一個(gè)很大的原因是因為短視頻平臺還沒(méi)有獲得批準
6. 我昨天發(fā)布了視頻,我想看看幾天是否有任何查詢(xún),我可以只看查詢(xún)嗎?
如果您發(fā)布視頻,您通常會(huì )在第二天看到查詢(xún)。
7. 我已隨意測試了一個(gè)產(chǎn)品,如何刪除查詢(xún)列表中有關(guān)該產(chǎn)品的查詢(xún)信息?
目前,查詢(xún)暫時(shí)不支持刪除,此功能將盡快更新
8.抖音搜索索引使用哪些工具?
我們可以直接在軟件上搜索
9. 為客戶(hù)開(kāi)立賬戶(hù)時(shí),對賬戶(hù)和密碼有什么特殊要求嗎?例如,特殊情況等
目前對開(kāi)戶(hù)的賬號密碼沒(méi)有特殊要求
10.關(guān)鍵詞排名信息從何而來(lái)?
關(guān)鍵詞排名信息相當于在抖音中搜索單詞以查找我們發(fā)布視頻的位置。
排名前10位
11.查詢(xún)信息會(huì )是一兩年前嗎?
查詢(xún)信息將
被過(guò)濾,一般控制在查詢(xún)的一個(gè)月內,并且我們對工作的實(shí)時(shí)數據進(jìn)行監控,我們得到的查詢(xún)信息會(huì )更準確
12. 手動(dòng)監控是否有數量限制
目前對手動(dòng)監視器的數量沒(méi)有限制
13.客戶(hù)開(kāi)始選擇主版本,如果以后想升級,該如何操作?我可以升級充值點(diǎn)差嗎?
我們不像什么主銷(xiāo)版本外面給你多少條查詢(xún)信息什么的,我們直接給你最高層,你想要的查詢(xún)信息隨心所欲,所以沒(méi)有這樣的問(wèn)題,當然,你得是代理還是獨立建設另一個(gè)討論
14.過(guò)去兩天測試的賬號,大部分的查詢(xún)信息都是來(lái)自一個(gè)賬號,就是我們的檢索系統關(guān)注的行業(yè)本身并不多,后期需要客戶(hù)手動(dòng)監控視頻來(lái)增加查詢(xún)次數,如果是這樣,根本就不需要使用這個(gè)系統, 客戶(hù)自己通過(guò)大V大賬號抖音查找評論
如果我們自動(dòng)監控,我們會(huì )根據搜索用戶(hù),然后找到用戶(hù)的視頻,然后獲取視頻下方的所有評論來(lái)執行此操作。這樣,如果用戶(hù)的視頻下有更多的意向數據,一個(gè)賬號下可能會(huì )有短期信息。如果客戶(hù)分發(fā)完成,將有其他用戶(hù)的信息
15. 手動(dòng)監控,如果ABC的多個(gè)用戶(hù)同時(shí)監控一個(gè)抖音賬戶(hù),分發(fā)查詢(xún)的信息規則是什么?它們會(huì )是相同的數據嗎?
可能有相同的數據,但不太可能
16.為什么我的查詢(xún)沒(méi)有更新?
這
查詢(xún)信息將在提交后0.5-2小時(shí)內更新,如果暫時(shí)沒(méi)有更新,請稍等片刻,可以去外面看很多小同行,基本上是24小時(shí),我們會(huì )早點(diǎn)更新新版本
17. 提交視頻發(fā)布后出現參數錯誤怎么辦?
一般參數錯誤是由于發(fā)布的視頻標題數量大于 55 字造成的
數量
主題文本 + #的數量 + 空格數 + 短視頻帳戶(hù)名稱(chēng)數 @ 和 @ 必須小于 55 字
18.上傳的視頻一直無(wú)法審核,會(huì )發(fā)生什么?
如果審核失敗,一般是由于短視頻平臺認定其不適合公開(kāi),一般包括:處理、視頻模糊、內容原因等。處理的可能性最大,所以在售后培訓時(shí)多聽(tīng),在我們公關(guān)技術(shù)培訓時(shí)多聽(tīng),并配合我們的模板去做,這不會(huì )發(fā)生
19. 本地客戶(hù)如何準確掌握?例如,成都*敏*感*詞*只在成都有客戶(hù)進(jìn)行婚紗攝影
本地用戶(hù)在監控時(shí)可以添加區域字進(jìn)行監控,如成都*敏*感*詞*、成都婚紗攝影
20. 我可以自己控制數據的分發(fā)嗎?例如,如果我賣(mài)出 500 個(gè)查詢(xún),而當發(fā)出 500 個(gè)查詢(xún)時(shí),我刪除了帳戶(hù)的采集
可以授予您此權限
21.沒(méi)有公司可以推動(dòng)嗎?我必須上傳我的營(yíng)業(yè)執照嗎?
???
目前沒(méi)有可以晉升的公司
22.膜結構是否屬于建材和家居裝飾的范疇?該產(chǎn)品是膜結構車(chē)棚停車(chē)場(chǎng)也屬于家裝建材類(lèi)
膜結構建材家居裝修(這種行業(yè)問(wèn)題直接在百度上搜索就很清楚了)說(shuō)實(shí)話(huà),我沒(méi)有做過(guò)這個(gè),也不太了解
23. 我已經(jīng)監控了這個(gè)詞,如果我添加它,為什么我不能添加它?
目前,監控詞不能重復添加,一個(gè)單詞監控一次和監控兩次具有相同的效果。
24. 我是操作最終客戶(hù)的操作模式還是教客戶(hù)自己操作?
如果我們這樣做,我們可以嘗試向客戶(hù)收取更換操作的費用,這通常稱(chēng)為代理操作
25.合作結束后,客戶(hù)的同城流行二維碼還能使用嗎?以前發(fā)布的視頻會(huì )產(chǎn)生影響嗎?
這
同一城市爆竹的二維碼不能使用,但之前發(fā)布的視頻仍將存在。
26.電腦可以接收查詢(xún)信息,但手機無(wú)法接收。
手機綁定不經(jīng)常使用,一段時(shí)間不看后,它們會(huì )停止推送
27.發(fā)布的視頻由手機品牌加水印,沒(méi)有違規,評論或失敗,是平臺的問(wèn)題嗎?
如果審核失敗,一般是由于短視頻平臺認定其不適合公開(kāi),一般包括:處理、視頻模糊、內容原因等。處理的可能性最大,建議在售后組多詢(xún)問(wèn)技術(shù),或者查看郵箱中的信息
28. 未通過(guò)審核的視頻是否會(huì )計入套餐中指定的視頻數量?
無(wú)法上傳的內容將不會(huì )計入計劃中指定的數字,只需單擊“重新發(fā)布”即可
29.很多客戶(hù)不做全國,做周邊或本地,因為物流成本等,有沒(méi)有辦法做到這一點(diǎn)
監視
本地單詞,可以添加本地單詞進(jìn)行監視。同時(shí),正在增加本地呼叫的服務(wù)功能
30.經(jīng)過(guò)所有檢測后,競爭視頻的總數會(huì )增加嗎?
如果是,競爭視頻的數量將會(huì )增加
一種新的添加劑,如果沒(méi)有新的添加劑,它不會(huì )增加
31. 檢測 929 個(gè)視頻,潛在客戶(hù)總數如何達到 9 個(gè)?如果檢測到所有視頻或 9 個(gè)視頻,該怎么辦?
在這種情況下,通常是由于行業(yè)內缺乏相關(guān)數據。建議更換監控字
32. 如果產(chǎn)品被重新測試,之前發(fā)布的查詢(xún)是否會(huì )被重新分發(fā)?
在同一帳戶(hù)中,它不會(huì )重復分發(fā)。建議不要重復關(guān)鍵詞監視。如果監控關(guān)鍵詞數量相對較少,建議更換關(guān)鍵詞
33. 如果有來(lái)自已經(jīng)測試過(guò)視頻的新客戶(hù)的消息,它會(huì )自動(dòng)再次轉到采集以增加挖礦次數嗎?
視頻那已經(jīng)測試過(guò)了,如果有新的客戶(hù)留言,只要他還在監控我們采集啊,這都是說(shuō),我們正在監控同行的工作采集最新的實(shí)時(shí)新數據
34. 如果潛在客戶(hù)消息數據相同,采集監控的不同產(chǎn)品是否會(huì )重復分發(fā)?
監控不同的產(chǎn)品,基本相同的客戶(hù)消息數據不會(huì )出現。也不會(huì )有重復的分發(fā)
35. 我們在后臺發(fā)布的視頻是否以這些抖音編號發(fā)布在作品中?
是的,在后臺發(fā)布的視頻直接發(fā)布到綁定到我們平臺的抖音帳戶(hù)
36. 我能否了解客戶(hù)在后臺發(fā)布的視頻的發(fā)布位置?
是的,在后臺視頻管理中,發(fā)布視頻,點(diǎn)擊查看按鈕,可以直接看到它
37.有些客戶(hù)想先測試,我會(huì )有一個(gè)測試賬號,怎么開(kāi)個(gè)測試
現在不建議先給顧客試用,因為很多顧客試圖先抓取一堆數據來(lái)實(shí)現白人的心理,它
不建議收費試煉,可以遠程給他演示,或者不敢相信,叫他檢查一下,網(wǎng)上白妓太多了
來(lái)自“ITPUB博客”,鏈接:,如果您需要轉載,請注明出處,否則您將承擔法律責任。