busco軟件使用詳解

BUSCO - 組裝質量評估軟件

BUSCO - Benchmarking Universal Single-Copy Orthologs 直譯的話就是普遍通用的單拷貝直系同源測試
BUSCO通過同源基因數據庫從基因完整度來評價基因組組裝結果仅胞。BUSCO首先構建了不同物種的最小基因集,然后使用HMMER饮怯,BLAST,Augustus等工具分析組裝結果中的同源基因猬错,從而定量評估組裝是否完整。

文獻

《BUSCO: assessing genome assembly and annotation completeness with single-copy orthologs》

說明

BUSCO是一款使用python語言編寫的對轉錄組和基因組組裝質量進行評估的軟件刹泄。在相近的物種之間總有一些保守的序列浦夷,而BUSCO就是使用這些保守序列與組裝的結果進行比對,鑒定組裝的結果是否包含這些序列喊暖,包含單條惫企、多條還是部分或者不包含等等情況來給出結果。

BUSCO 軟件根據OrthoDB 數據庫陵叽,構建了幾個大的進化分支的單拷貝基因集狞尔。將轉錄本拼接結果與該基因集進行比較,根據比對上的比例巩掺、完整性偏序,來評價拼接結果的準確性和完整性。

BUSCO使用其他的工具搭建了流程胖替,它的流程是

genoem assemble : tBLASTn --> Augustus --> HMMER3
Transcriptome   :             Find ORF --> HMMER3
Gene set        :                          HMMER3

1. 下載與安裝【方便】

這里使用conda來自動安裝BUSCO以及它的依賴工具研儒。如果沒有conda豫缨,那么可以查看這篇文章安裝conda。

安裝conda之后進行busco的安裝端朵。安裝完畢之后好芭,下載好數據庫文件就可以直接跳到運行那一步了。下面的配置啊冲呢,安裝之類的是針對【麻煩】的安裝方式舍败。

conda install busco

有時候在默認搜索庫中沒有找到相關信息,那么就嘗試下面的方法

# 構建conda的python3環(huán)境
conda create --name python36 python=3.6
#  然后激活
conda activate python36
# 執(zhí)行安裝
conda install -c https://conda.anaconda.org/bioconda busco
# 在使用完busco之后可以退出python36環(huán)境
conda deactivate

如果使用conda安裝成功敬拓,那么就執(zhí)行2\. 下載數據庫文件 -> 5\. 運行 -> 6\. 結果解讀 -> 7\. 畫圖

使用conda自動完整安裝過程邻薯,但是有時候沒有管理員權限或者其他一些原因無法這樣安裝,那么就可以根據下面的方法進行安裝乘凸。

1. 下載與安裝【麻煩】

不使用conda安裝的話厕诡,那么每一個工具需要單獨下載,然后導入到環(huán)境變量當中去营勤,讓busco想用到它們的時候能夠找得到它們灵嫌。在對這種關聯(lián)軟件安裝折磨之后對程序的安裝的理解有幫助的,加油冀偶!

依賴的工具

  • Augustus
  • HMMER
  • Blast+

下載

  • 下載軟件包
#  ============ 下載BUSCO  ============ 
cd ~/Applications/download
wget -c https://gitlab.com/ezlab/busco/-/archive/master/busco-master.zip -O busco.zip

# ============ 下載依賴的工具 ============
# 下載Augustus
wget -c http://bioinf.uni-greifswald.de/augustus/binaries/augustus.current.tar.gz
# 下載HMMER
wget -c http://eddylab.org/software/hmmer/hmmer.tar.gz -O hmmer.tar.gz
# 下載Blast+
wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/executables/LATEST/ncbi-blast-2.7.1+-x64-linux.tar.gz

安裝

cd ~/Applications/download

# === 安裝busco ===
unzip busco.zip
# 改名
mv busco-master busco 
# 移動到外部
mv busco ../
cd ../busco
# 安裝
python setup.py install

cd ~/Applications/download
# === 安裝Augustus ===
tar -xzvf augustus.current.tar.gz
cd augustus-3.3.1
cd ../
mv augustus-3.3.1 ../
cd ../augustus-3.3.1
# 打開common.mk文件,將ZIPINPUT = true注釋掉(即在最前面加一#號)
vim common.mk
# 安裝
make

cd ~/Applications/download
# === 安裝HMMER ===
tar -xzvf hmmer.tar.gz
cd hmmer-3.2.1
./configure
make

# === 安裝blast+ ===
tar -xzvf ncbi-blast-2.7.1+-x64-linux.tar.gz
# 改名
mv ncbi-blast-2.7.1+ ../blast+-2.7.1-linux

# 刪除安裝包
cd ~/Applications/download
rm busco.zip
rm augustus.current.tar.gz
rm hmmer.tar.gz
rm ncbi-blast-2.7.1+-x64-linux.tar.gz

2. 下載數據庫文件

上面軟件安裝完畢之后渔嚷,就開始下載數據庫文件了进鸠,根據組裝的物種來選擇對應的數據庫文件。

# 瀏覽器打開下列網址
https://busco.ezlab.org/

查找下載需要評估的組裝的物種對應的類群(最近:最近發(fā)現(xiàn)了busco的庫更新了形病,里面的數據庫的分類更加詳細了客年,但是大類還是下面5個,具體的詳細類別這里就不列舉了)

- Bacteria 細菌
- Protists 原生生物
- Metazoa 后生動物
- Fungi 真菌
- Plant 植物

例如下載植物的BUSCO的數據庫(對著需要下載的類群的圖片右鍵->復制鏈接地址漠吻,之后就得到了下載鏈接量瓜,然后在命令行使用wget之類的下載命令下載),比如下面我下載的是植物相關的途乃,我就下載的植物類群绍傲。

mkdir -p ~/database/BUSCO/
cd ~/database/BUSCO/
# 下載
wget -c https://busco.ezlab.org/datasets/embryophyta_odb9.tar.gz
# 解壓文件
tar -xzvf embryophyta_odb9.tar.gz

下面在執(zhí)行那一步對應的數據庫的文件路徑就是

~/database/BUSCO/embryophyta_odb9

3. 配置

這里配置是必須的,這一步需要仔細一些耍共,路徑出錯的話是無法通過busco的檢測的烫饼,在安裝好軟件之后 ~/Applications/busco/config/之中并沒有config.ini文件,只有一個config.ini_default文件试读,可以把里面的內容復制下來杠纵,

  • 方法1

新建一個config.ini文件或者直接復制一份

cp config.ini_default config.ini

  • 方法2

也可以按照下面的說明進行

# 增加配置文件
vim ~/Applications/busco/config/config.ini

加入如下內容

# BUSCO specific configuration
# It overrides default values in code and dataset cfg, and is overridden by arguments in command line
# Uncomment lines when appropriate
[busco]
# Input file
;in = ./sample_data/target.fa
# Run name, used in output files and folder
;out = SAMPLE
# Where to store the output directory
# out_path = /workdir
# Path to the BUSCO dataset
;lineage_path = ./sample_data/example
# Which mode to run (genome / protein / transcriptome)
;mode = genome
# How many threads to use for multithreaded steps
;cpu = 1
# Domain for augustus retraining, eukaryota or prokaryota
# Do not change this unless you know exactly why !!!
;domain = eukaryota
# Force rewrite if files already exist (True/False)
;force = False
# Restart mode (True/False)
;restart = False
# Blast e-value
;evalue = 1e-3
# Species to use with augustus, for old datasets only
;species = fly
# Augustus extra parameters
# Use single quotes, like this: '--param1=1 --param2=2'
;augustus_parameters = ''
# Tmp folder
;tmp_path = ./tmp/
# How many candidate regions (contigs, scaffolds) to consider for each BUSCO
;limit = 3
# Augustus long mode for retraining (True/False)
;long = False
# Quiet mode (True/False)
;quiet = False
# Debug logs (True/False), it needs Quiet to be False
debug = True
# tar gzip output files (True/False)
;gzip = False
# Force single core for the tblastn step
;blast_single_core = True

[tblastn]
# path to tblastn
path = ~/Applications/blast+-2.7.1-linux/bin

[makeblastdb]
# path to makeblastdb
path = ~/Applications/blast+-2.7.1-linux/bin

[augustus]
# path to augustus
path = ~/Applications/augustus-3.3.1/bin

[etraining]
# path to augustus etraining
path = ~/Applications/augustus-3.3.1/bin

# path to augustus perl scripts, redeclare it for each new script        
[gff2gbSmallDNA.pl]                                                      
path = ~/Applications/augustus-3.3.1/scripts                         
[new_species.pl]                                                         
path = ~/Applications/augustus-3.3.1/scripts                         
[optimize_augustus.pl]                                                   
path = ~/Applications/augustus-3.3.1/scripts                         

[hmmsearch]                                                              
# path to HMMsearch executable                                           
path = ~/Applications/hmmer-3.2.1/src                                

[Rscript]                                                                
# path to Rscript, if you wish to use the plot tool                      
path = /usr/bin/

在新建好config.ini文件之后,

  1. config.ini文件中的out_path = /workdir前面加上#
    因為這個工具的輸出路徑有時候會出錯钩骇,所以干脆將它注釋掉比藻,之后假如運行busco之后铝量,輸出的路徑就是你之前cd到的路徑

  2. 之后一般需要改這幾項對應的路徑(里面的路徑需要更改為你自己的工具的路徑

選項 相關
[tblastn] blast+
[makeblastdb] blast+
[augustus] Augustus
[hmmsearch] HMMER
[gff2gbSmallDNA.pl] Augustus
[new_species.pl] Augustus
[optimize_augustus.pl] Augustus
[hmmsearch] HMMER

??這些就是剛才我們安裝的blast+HMMERAugustus的執(zhí)行文件的路徑,只需要把前面的路徑改為你安裝的程序的位置的路徑就可以啦银亲!

比如我的blast+是安裝在~/Applications之下慢叨, 執(zhí)行文件在~/Applications/blast+-2.7.1-linux/bin 之中,比如你是安裝在~/NAME/biosofts下面群凶,那么對應的執(zhí)行文件的路徑就是~/NAME/biosofts/blast+-2.7.1-linux/bin插爹。

其實可以看到上面的都是一些路徑或者默認選項設置,讀取配置文件然后設置這些項目進入程序是很多工具的方式请梢。

4. 導入環(huán)境變量

這里沒有對軟件進行完整的安裝赠尾,所以需要導入臨時環(huán)境變量(防止在配置文件中busco沒有找到相關程序)
下面的路徑都是剛才安裝的程序的對應的路徑

# augustus工具的執(zhí)行文件所在文件夾
export PATH="/home/ssd/Applications/augustus-3.3.1/bin:$PATH"
# augustus工具附加腳本所在文件夾
export PATH="/home/ssd/Applications/augustus-3.3.1/scripts:$PATH"
# augustus工具配置文件的所在位置 。AUGUSTUS_CONFIG_PATH 需要使用絕對路徑
export AUGUSTUS_CONFIG_PATH="/home/ssd/Applications/augustus-3.3.1/config"
# hmmer工具的執(zhí)行文件所在文件夾
export PATH="/home/ssd/Applications/hmmer-3.2.1/src:$PATH"
# blast+工具的執(zhí)行文件所在文件夾
export PATH="/home/ssd/Applications/blast+-2.7.1-linux/bin:$PATH"

[可選]如果經常使用毅弧,建議加入永久的環(huán)境變量

# 打開.bash_profile文件
vim ~/.bash_profile

# 在末尾添加上面的導入環(huán)境變量的內容

5. 運行

開始評估

基本的使用方法為

run_BUSCO.py -i [組裝的文件.fasta]  -l  [數據庫文件夾] -o [輸出文件名] -m [評估模式] [其他一些選項]

??實際使用例子气嫁,如果是使用conda安裝的BUSCO的話搭综。執(zhí)行的時候不需要寫完整的路徑灾票,只需要寫run_BUSCO.py

# 首先cd到對應的組裝文件的文件夾
# 

# -i 輸入文件
# -l BUSCO的數據庫文件
# -o 輸出的文件名的后綴以及文件夾的名稱
# -m 分析類型(genome术幔、transcriptome元咙、proteins)
# --cpu 線程數
~/Applications/busco/scripts/run_BUSCO.py \
    -i contigs.fasta \
    -l ~/database/BUSCO/embryophyta_odb9 \
    -o suffix\
    -m genome \
    --cpu 8

??注意:在fasta文件中梯影,一些組裝工具生成的contig的名字是這種形式的>contig/1/12345之類的,這種fasta文件在運行的時候BUSCO會報錯庶香,解決辦法就是將這種改名甲棍,老辦法,perl單行程序赶掖。

cat contig.fasta | perl -p -e 's{/}{}g' > contig.new.fasta

6. 結果解讀

在運行文件夾下會有

  • run_suffix 文件夾:因為上面-o選項設置了suffix感猛,所以文件夾名稱加上了后綴。在這個文件夾里面奢赂,有一個文件最為重要陪白。就是short_summary_suffix.txt

下面是個范例

# Summarized benchmarking in BUSCO notation for file assembly/spades/contigs.fasta
# BUSCO was run in mode: genome
    C:98.6%[S:98.6%,D:0.0%],F:0.0%,M:1.4%,n:148

    146 Complete BUSCOs (C)
    146 Complete and single-copy BUSCOs (S)
    0   Complete and duplicated BUSCOs (D)
    0   Fragmented BUSCOs (F)
    2   Missing BUSCOs (M)
    148 Total BUSCO groups searched

縮寫 全稱 說明 關系
C Complete 多少個BUSCO測試基因被覆蓋膳灶。 C = S + D
S single-copy 多少個基因經過比對發(fā)現(xiàn)是單拷貝咱士。 -
D duplicated 多少個基因經過比對發(fā)現(xiàn)包含多拷貝。 -
F Fragment 多少個基因經過比對覆蓋不完全轧钓,只是部分比對上司致。 -
M Miss 沒有得到比對結果的基因數 -
Total Total 總共測試的基因條目數 Total = C + F + M

C值表示和BUSCO集相比的完整度,M值表示可能缺少的基因數聋迎,D則是重復數脂矫。

一般來看,S似乎越大越好霉晕,M越小越好庭再,說明組裝的越完整捞奕,因為檢測的單拷貝同源基因出現(xiàn)得多。但是DF這兩個數值越大不見得就是好的拄轻,因為組裝的錯誤可能會帶來這兩個值的增大颅围。

BUSCO評估結果:
一般情況下對于完整度較好的基因組組裝結果來講,Complete and single-copy越多越好恨搓,而Complete and duplicated和Missing越少越好院促,對于Fragmented也盡可能地少一些。

真實項目中斧抱,Complete BUSCOs (C) 的比例通常都能達到 80% 以上常拓。

下面列舉了三種比對的情況。

  • 情況1 - 完全覆蓋
說明: +表示組裝得到基因序列 -表示用于測試的基因序列

組裝 : ================+++++++==============
測試                   -------
                       或者
組裝 : ==============+++++++++++============
測試                   -------               

  • 情況2 - 部分覆蓋
組裝 : ================+++++++==============
測試                   -----
                     /      \
                       或者
組裝 : ================+++++++==============
測試                   -------
                     /        \

  • 情況3 - 沒有比對
組裝 : ================+++++++==============
測試 

一般來看S + D的數值也就是C的值越大越好辉浦,但是在文獻中作者說如果D的數值太多的話可能意味著組裝錯誤的可能性較大弄抬。因為一個基因(BUSCO數據庫中該基因一般為單拷貝)被覆蓋多次,那么可能就是說該基因所在的片段組裝可能出現(xiàn)問題宪郊。
因為理論上

理論上:--------------------------------------------
實際上:--------   ----------    ----------    -----
錯誤的:--------                 -------------
           \\\\                    ///
          -----------     --------------

理論上組裝之后各個片段之間應該前后有序掂恕,之間除了重復區(qū)域或者其他特殊片段之外不應該有可以重疊的地方。
例如

sequence1 : ..TAGTCGTGA                         GTGCATGCTGTAGC..
                       \                       /
                        AAAATTGG......CGATGAAAA
                       /                       \
sequence2 : ..GGGTAGCGG                         TTGACTAGCTAGCT..

也就是說中間一段序列是兩個序列的共同部分弛槐,除非這個序列存在多個拷貝懊亡,否則就很可能是拼接錯誤。通常一般這種拼接錯誤的序列的兩端會出現(xiàn)重復序列乎串。另外如果是多倍體組裝的話店枣,D值也可能大。

基因組組裝結果不能僅僅只是通過這一個軟件來判定灌闺。比如還可以借助QUAST和常規(guī)指標N50艰争、總的核酸量坏瞄、點陣圖等等多個輔助標準來進行綜合的評估桂对。

7. 畫圖

在執(zhí)行完畢之后,可以使用generate_plot.py畫圖鸠匀,這個圖形說白了就是一種條形圖蕉斜。

  • 首先把所有的經過BUSCO檢測的結果聚集到一個文件夾之內
mkdir my_summaries
cp run_SPEC1/short_summary_SPEC1.txt my_summaries/.
cp run_SPEC2/short_summary_SPEC2.txt my_summaries/.
cp run_SPEC3/short_summary_SPEC3.txt my_summaries/.
cp run_SPEC4/short_summary_SPEC4.txt my_summaries/.
cp run_SPEC5/short_summary_SPEC5.txt my_summaries/.

  • 然后運行
python scripts/generate_plot.py –wd my_summaries

image

這個圖就是將剛才第6步中的那五個數值變成這種條形圖顯示,讓這種多少的對比更加明顯缀棍,當然了宅此,你自己也可以使用正則表達式將數值抓取出來,之后輸出到文件中爬范,然后使用python或者R來畫圖也是可以的父腕。

參考

Augustus安裝錯誤

這種問題在Mac上安裝出現(xiàn)的可能性比較大
y

cd auxprogs && make
make[1]: Entering directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs'
cd bam2hints; make;
make[2]: Entering directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs/bam2hints'
g++ -Wall -O2    -c bam2hints.cc -o bam2hints.o -I/usr/include/bamtools 
bam2hints.cc:16:27: fatal error: api/BamReader.h: No such file or directory
 #include <api/BamReader.h>
                           ^
compilation terminated.
Makefile:29: recipe for target 'bam2hints.o' failed
make[2]: *** [bam2hints.o] Error 1
make[2]: Leaving directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs/bam2hints'
Makefile:7: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/home/jxyue/Tools/augustus-3.2.3/auxprogs'
Makefile:7: recipe for target 'all' failed
make: *** [all] Error 2

解決方法

第一步:安裝好bamtools

  • 簡單的安裝方法
brew install bamtools libbamtools-dev

  • 其他安裝方法
git clone git://github.com/pezmaster31/bamtools.git
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/your/path/to/bamtools ..
make
make install

第二步:修改路徑

  • bam2hints Makefile
# 先進入到augustus的解壓目錄
cd ~/Application/augustus-3.2.3/auxprogs/bam2hints
vim Makefile

# ====== 修改下列值 =====

# 原始
INCLUDES = /usr/include/bamtools
# 修改
INCLUDES = $(BAMTOOLS)/include/bamtools

# 原始
LIBS = -lbamtools -lz
# 修改
LIBS = $(BAMTOOLS)/lib64/libbamtools.a -lz

  • filterBam Makefile
cd ~/Application/augustus-3.2.3/auxprogs/filterBam/src/
vim Makefile

# ====== 修改下列值 =====

# 原始
BAMTOOLS = /usr/include/bamtools
# 修改
# BAMTOOLS = /usr/include/bamtools

# 原始
INCLUDES = -I$(BAMTOOLS) -Iheaders -I./bamtools
# 修改
INCLUDES = -I$(BAMTOOLS)/include/bamtools -Iheaders -I./bamtools

# 原始
LIBS = -lbamtools -lz
# 修改
LIBS = $(BAMTOOLS)/lib64/libbamtools.a -lz

安裝

make BAMTOOLS=$(which bamtools)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------I`m a line ! Thanks !---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

參考鏈接:http://www.reibang.com/p/5041460f7a5d

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市青瀑,隨后出現(xiàn)的幾起案子璧亮,更是在濱河造成了極大的恐慌萧诫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枝嘶,死亡現(xiàn)場離奇詭異帘饶,居然都是意外死亡,警方通過查閱死者的電腦和手機群扶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門及刻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竞阐,你說我怎么就攤上這事缴饭。” “怎么了馁菜?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵茴扁,是天一觀的道長。 經常有香客問我汪疮,道長峭火,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任智嚷,我火速辦了婚禮卖丸,結果婚禮上,老公的妹妹穿的比我還像新娘盏道。我一直安慰自己稍浆,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布猜嘱。 她就那樣靜靜地躺著衅枫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朗伶。 梳的紋絲不亂的頭發(fā)上弦撩,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音论皆,去河邊找鬼益楼。 笑死,一個胖子當著我的面吹牛点晴,可吹牛的內容都是我干的感凤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼粒督,長吁一口氣:“原來是場噩夢啊……” “哼陪竿!你這毒婦竟也來了?” 一聲冷哼從身側響起屠橄,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤族跛,失蹤者是張志新(化名)和其女友劉穎捐康,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體庸蔼,經...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡解总,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姐仅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片花枫。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掏膏,靈堂內的尸體忽然破棺而出劳翰,到底是詐尸還是另有隱情,我是刑警寧澤馒疹,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布佳簸,位于F島的核電站,受9級特大地震影響颖变,放射性物質發(fā)生泄漏生均。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一腥刹、第九天 我趴在偏房一處隱蔽的房頂上張望马胧。 院中可真熱鬧,春花似錦衔峰、人聲如沸佩脊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽威彰。三九已至,卻和暖如春穴肘,著一層夾襖步出監(jiān)牢的瞬間歇盼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工梢褐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旺遮,地道東北人赵讯。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓盈咳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親边翼。 傳聞我的和親對象是個殘疾皇子鱼响,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容