Refactors the indexing and the syntax
Human queries are now in french. Sorry for that
This commit is contained in:
42
album.go
42
album.go
@@ -34,30 +34,32 @@ type Link struct {
|
||||
// This is basically the data we store on bdgest.com, and that we want
|
||||
// in our system to be retrieve from
|
||||
type Album struct {
|
||||
ID AlbumID `bl_name:"id" bl_index:"false" bl_include_all:"false"`
|
||||
ISBN string `bl_name:"isbn" bl_analyzer:"keyword" bl_include_all:"false"`
|
||||
Series string `bl_name:"série" bl_analyzer:"fr"`
|
||||
Title string `bl_name:"titre" bl_analyzer:"fr"`
|
||||
Num int `bl_name:"num" bl_index:"false" bl_include_all:"false"`
|
||||
NumA string `bl_name:"num_a" bl_index:"false" bl_include_all:"false"`
|
||||
State AlbumState `bl_name:"state" bl_index:"false" bl_include_all:"false"`
|
||||
ID AlbumID
|
||||
ISBN string
|
||||
Series string `json:"série"`
|
||||
Title string `json:"titre"`
|
||||
Num int
|
||||
NumA string
|
||||
State AlbumState
|
||||
|
||||
Editor string `bl_name:"editor" bl_analyzer:"simple"`
|
||||
Collection string `bl_name:"collection" bl_analyzer:"fr"`
|
||||
Editor string `json:"éditeur"`
|
||||
Collection string `json:"collection"`
|
||||
|
||||
SatID string `bl_name:"cote" bl_analyzer:"keyword"`
|
||||
SatID string `json:"ref"`
|
||||
|
||||
LegalDeposit time.Time `bl_name:"dl" bl_index:"false" bl_include_all:"false"`
|
||||
PrintDate time.Time `bl_name:"ai" bl_index:"false" bl_include_all:"false"`
|
||||
PurchaseDate time.Time `bl_name:"achat" bl_index:"false" bl_include_all:"false"`
|
||||
LegalDeposit time.Time
|
||||
PrintDate time.Time
|
||||
PurchaseDate time.Time
|
||||
|
||||
CoverURL string `bl_name:"cover" bl_index:"false" bl_include_all:"false"`
|
||||
Description string `bl_name:"description" bl_analyzer:"fr"`
|
||||
Note float64 `bl_name:"note" bl_index:"false" bl_include_all:"false"`
|
||||
CoverURL string
|
||||
Description string `json:"description"`
|
||||
Note float64
|
||||
|
||||
Scenarist []Link `bl_name:"scenario" bl_analyzer:"simple"`
|
||||
Designer []Link `bl_name:"dessins" bl_analyzer:"simple"`
|
||||
Colorist []Link `bl_name:"couleurs" bl_analyzer:"simple"`
|
||||
Scenarists []string `json:"scenario"`
|
||||
Designers []string `json:"dessins"`
|
||||
Colorists []string `json:"couleurs"`
|
||||
|
||||
FetchDate time.Time `bl_name:"old" bl_index:"false" bl_include_all:"false"`
|
||||
Links map[string]string
|
||||
|
||||
FetchDate time.Time
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@ func (g *AlbumDescriptionGetter) Get(a *Album) error {
|
||||
|
||||
details := map[string][]*goquery.Selection{}
|
||||
previous := ""
|
||||
a.Links = map[string]string{}
|
||||
doc.Find("div.detail-album ul.infos-albums li").Each(func(i int, s *goquery.Selection) {
|
||||
labelSelection := s.Find("label")
|
||||
if labelSelection.Size() != 1 {
|
||||
@@ -121,7 +122,8 @@ func (g *AlbumDescriptionGetter) Get(a *Album) error {
|
||||
for _, s := range sList {
|
||||
l := linkFromSelection(s.Find("a"))
|
||||
if len(l.Title) > 0 {
|
||||
a.Scenarist = append(a.Scenarist, l)
|
||||
a.Scenarists = append(a.Scenarists, l.Title)
|
||||
a.Links[l.Title] = l.Target
|
||||
}
|
||||
}
|
||||
errors <- nil
|
||||
@@ -137,7 +139,8 @@ func (g *AlbumDescriptionGetter) Get(a *Album) error {
|
||||
for _, s := range sList {
|
||||
l := linkFromSelection(s.Find("a"))
|
||||
if len(l.Title) > 0 {
|
||||
a.Designer = append(a.Designer, l)
|
||||
a.Designers = append(a.Designers, l.Title)
|
||||
a.Links[l.Title] = l.Target
|
||||
}
|
||||
}
|
||||
errors <- nil
|
||||
@@ -153,7 +156,8 @@ func (g *AlbumDescriptionGetter) Get(a *Album) error {
|
||||
for _, s := range sList {
|
||||
l := linkFromSelection(s.Find("a"))
|
||||
if len(l.Title) > 0 {
|
||||
a.Colorist = append(a.Colorist, l)
|
||||
a.Colorists = append(a.Colorists, l.Title)
|
||||
a.Links[l.Title] = l.Target
|
||||
}
|
||||
}
|
||||
errors <- nil
|
||||
|
||||
@@ -44,18 +44,50 @@ func (s *BleveIndexerSuite) TestCanDeleteAlbum(c *C) {
|
||||
|
||||
func (s *BleveIndexerSuite) TestCanSearch(c *C) {
|
||||
data := map[string]map[AlbumID]bool{
|
||||
"frégate": map[AlbumID]bool{albumsDataTest[10].ID: true},
|
||||
"Éditeur:Dupuis": map[AlbumID]bool{8179: true, 9935: true, 160366: true},
|
||||
// Research by amny keyword (here in the description
|
||||
"frégate": map[AlbumID]bool{84448: true},
|
||||
// Research by editor
|
||||
"éditeur:Dupuis": map[AlbumID]bool{8179: true, 9935: true, 160366: true},
|
||||
// Research by Title
|
||||
"titre:\"Mortes saisons\"": map[AlbumID]bool{8179: true},
|
||||
// Keyword can appear in both Title and Description
|
||||
"pour mourir": map[AlbumID]bool{44989: true, 84448: true, 160366: true, 19762: true},
|
||||
// Or in the collection
|
||||
"écho savanes": map[AlbumID]bool{15875: true},
|
||||
// May not find anything, but never fails
|
||||
"FOOOOOOOBAAAAAR": map[AlbumID]bool{},
|
||||
// Or we can only look for collection field
|
||||
"collection:Dupuis": map[AlbumID]bool{160366: true},
|
||||
// Maybe we are only inderested in scenarist
|
||||
"scenario:plantu": map[AlbumID]bool{58595: true},
|
||||
// Or designer
|
||||
"dessins:berthet": map[AlbumID]bool{8179: true},
|
||||
// or colorist, but Trondheim does not does color ;)
|
||||
"couleurs:trondheim": map[AlbumID]bool{},
|
||||
// or any of that fields, yes Trondheim do draw some comics ;)
|
||||
"trondheim": map[AlbumID]bool{160366: true},
|
||||
// or we just want to look up a reference
|
||||
"CHI-23": map[AlbumID]bool{46005: true},
|
||||
// or more explicitely
|
||||
"ref:BERT-9": map[AlbumID]bool{8179: true},
|
||||
// or we are just interested in good comics
|
||||
"Note:>4": map[AlbumID]bool{52100: true, 19762: true, 160366: true},
|
||||
// or bad ones
|
||||
"Note:<2": map[AlbumID]bool{754: true, 32043: true},
|
||||
}
|
||||
start := time.Now()
|
||||
for q, expected := range data {
|
||||
res, err := s.i.Search(q)
|
||||
if c.Check(err, IsNil) == true {
|
||||
if c.Check(len(res), Equals, len(expected)) == true {
|
||||
if c.Check(len(res), Equals, len(expected), Commentf("Query: %s", q)) == true {
|
||||
for _, resAlbum := range res {
|
||||
_, ok := expected[resAlbum.ID]
|
||||
c.Check(ok, Equals, true, Commentf("Looking for %d in %s", resAlbum.ID, expected))
|
||||
c.Check(ok, Equals, true, Commentf("Query: %s, got %d instead of %v", q, resAlbum.ID, expected))
|
||||
}
|
||||
} else {
|
||||
log.Printf("Got %d result(s)", len(res))
|
||||
for i, a := range res {
|
||||
log.Printf(" - %d: %d: %s", i, a.ID, a.Title)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ func GetCsvData() *bytes.Buffer {
|
||||
|
||||
m := rxSatID.FindStringSubmatch(a.SatID)
|
||||
if m == nil {
|
||||
panic(fmt.Sprintf("should not happen with %#v", a))
|
||||
panic(fmt.Sprintf("Could not read regexp %#v", a))
|
||||
}
|
||||
fmt.Fprintf(res, ";%d;%s;;;%s;;;;%s;%s;;;\"foo\";;;ALBUM\n", a.State, a.PurchaseDate.Format("02/01/2006"), "", m[1], m[2])
|
||||
}
|
||||
|
||||
31
indexer.go
31
indexer.go
@@ -39,30 +39,44 @@ func buildAlbumMapping() *bleve.IndexMapping {
|
||||
keywordFieldMapping.Analyzer = keyword_analyzer.Name
|
||||
keywordFieldMapping.IncludeInAll = false
|
||||
|
||||
numericMappingDisabled := bleve.NewNumericFieldMapping()
|
||||
numericMappingDisabled.Index = false
|
||||
numericMappingDisabled.IncludeInAll = false
|
||||
numericDisabled := bleve.NewNumericFieldMapping()
|
||||
numericDisabled.Index = false
|
||||
numericDisabled.Store = false
|
||||
numericDisabled.IncludeInAll = false
|
||||
|
||||
textDisabled := bleve.NewTextFieldMapping()
|
||||
textDisabled.Index = false
|
||||
textDisabled.Store = false
|
||||
textDisabled.IncludeInAll = false
|
||||
|
||||
dateStore := bleve.NewDateTimeFieldMapping()
|
||||
dateStore.Index = false
|
||||
dateStore.IncludeInAll = false
|
||||
dateDisabled := bleve.NewDateTimeFieldMapping()
|
||||
dateDisabled.Index = false
|
||||
dateDisabled.Store = false
|
||||
dateDisabled.IncludeInAll = false
|
||||
|
||||
albumMapping := bleve.NewDocumentStaticMapping()
|
||||
|
||||
albumMapping.AddFieldMappingsAt("ID", numericMappingDisabled)
|
||||
albumMapping.AddFieldMappingsAt("ID", numericDisabled)
|
||||
albumMapping.AddFieldMappingsAt("ISBN", keywordFieldMapping)
|
||||
albumMapping.AddFieldMappingsAt("Series", frenchTextMapping)
|
||||
albumMapping.AddFieldMappingsAt("Title", frenchTextMapping)
|
||||
albumMapping.AddFieldMappingsAt("Num", numericMappingDisabled)
|
||||
albumMapping.AddFieldMappingsAt("Num", numericDisabled)
|
||||
albumMapping.AddFieldMappingsAt("NumA", textDisabled)
|
||||
albumMapping.AddFieldMappingsAt("State", numericDisabled)
|
||||
albumMapping.AddFieldMappingsAt("Editor", simpleMapping)
|
||||
albumMapping.AddFieldMappingsAt("Collection", frenchTextMapping)
|
||||
albumMapping.AddFieldMappingsAt("SatID", keywordFieldMapping)
|
||||
albumMapping.AddFieldMappingsAt("Description", frenchTextMapping)
|
||||
albumMapping.AddFieldMappingsAt("LegalDeposit", dateDisabled)
|
||||
albumMapping.AddFieldMappingsAt("PrintDate", dateDisabled)
|
||||
albumMapping.AddFieldMappingsAt("PurchaseDate", dateDisabled)
|
||||
albumMapping.AddFieldMappingsAt("CoverURL", dateDisabled)
|
||||
albumMapping.AddFieldMappingsAt("Note", bleve.NewNumericFieldMapping())
|
||||
albumMapping.AddFieldMappingsAt("Scenarists", simpleMapping)
|
||||
albumMapping.AddFieldMappingsAt("Designers", simpleMapping)
|
||||
albumMapping.AddFieldMappingsAt("Colorists", simpleMapping)
|
||||
albumMapping.AddFieldMappingsAt("Colorists", textDisabled)
|
||||
albumMapping.AddFieldMappingsAt("FetchDate", dateDisabled)
|
||||
|
||||
indexMapping := bleve.NewIndexMapping()
|
||||
indexMapping.AddDocumentMapping("album", albumMapping)
|
||||
@@ -170,6 +184,7 @@ func (i *bleveIndexer) Search(query string) ([]*Album, error) {
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
res = append(res, a)
|
||||
}
|
||||
|
||||
|
||||
527
testdata/albums.json
vendored
527
testdata/albums.json
vendored
@@ -2,533 +2,460 @@
|
||||
{
|
||||
"ID": 8179,
|
||||
"ISBN": "2-8001-1161-5",
|
||||
"Series": "Mortes saisons",
|
||||
"Title": "Mortes saisons",
|
||||
"série": "Mortes saisons",
|
||||
"titre": "Mortes saisons",
|
||||
"Num": -1,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Dupuis",
|
||||
"Collection": "Berthet",
|
||||
"SatID": "BERT-9",
|
||||
"éditeur": "Dupuis",
|
||||
"collection": "Berthet",
|
||||
"ref": "BERT-9",
|
||||
"LegalDeposit": "1985-10-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-04T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_8179.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 3.4,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Andreas",
|
||||
"Target": "http://www.bedetheque.com/auteur-267-BD-Andreas.html"
|
||||
}
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Berthet, Philippe",
|
||||
"Target": "http://www.bedetheque.com/auteur-13-BD-Berthet-Philippe.html"
|
||||
}
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Berthet, Philippe",
|
||||
"Target": "http://www.bedetheque.com/auteur-13-BD-Berthet-Philippe.html"
|
||||
}
|
||||
],
|
||||
"scenario": [
|
||||
"Andreas"
|
||||
],
|
||||
"dessins": [
|
||||
"Berthet, Philippe"
|
||||
],
|
||||
"couleurs": [
|
||||
"Berthet, Philippe"
|
||||
],
|
||||
"Links": {
|
||||
"Andreas":"http://www.bedetheque.com/auteur-267-BD-Andreas.html",
|
||||
"Berthet, Philippe": "http://www.bedetheque.com/auteur-13-BD-Berthet-Philippe.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 44989,
|
||||
"ISBN": "2-205-01493-5",
|
||||
"Series": "Abel Dopeulapeul",
|
||||
"Title": "Sale temps pour mourir",
|
||||
"série": "Abel Dopeulapeul",
|
||||
"titre": "Sale temps pour mourir",
|
||||
"Num": 2,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Dargaud",
|
||||
"Collection": "Collection Pilote",
|
||||
"SatID": "ZCO-35",
|
||||
"éditeur": "Dargaud",
|
||||
"collection": "collection Pilote",
|
||||
"ref": "ZCO-35",
|
||||
"LegalDeposit": "1979-01-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-04T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/abeldopeulapeul02.JPG",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 4,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Loro",
|
||||
"Target": "http://www.bedetheque.com/auteur-839-BD-Loro.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Loro"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Loro",
|
||||
"Target": "http://www.bedetheque.com/auteur-839-BD-Loro.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Loro"
|
||||
],
|
||||
"Links": {
|
||||
"Loro": "http://www.bedetheque.com/auteur-839-BD-Loro.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 58595,
|
||||
"ISBN": "",
|
||||
"Series": "(AUT) Plantu",
|
||||
"Title": "Des fourmis dans les jambes",
|
||||
"série": "(AUT) Plantu",
|
||||
"titre": "Des fourmis dans les jambes",
|
||||
"Num": -1,
|
||||
"NumA": "1989",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Le Monde",
|
||||
"Collection": "",
|
||||
"SatID": "HUMO-17",
|
||||
"éditeur": "Le Monde",
|
||||
"collection": "",
|
||||
"ref": "HUMO-17",
|
||||
"LegalDeposit": "0001-01-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-12-07T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/plantufourmicouverture.JPG",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 3,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Plantu",
|
||||
"Target": "http://www.bedetheque.com/auteur-5996-BD-Plantu.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Plantu"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Plantu",
|
||||
"Target": "http://www.bedetheque.com/auteur-5996-BD-Plantu.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Plantu"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "\u003cN\u0026B\u003e",
|
||||
"Target": "http://www.bedetheque.com/auteur-477-BD-NB.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"\u003cN\u0026B\u003e"
|
||||
],
|
||||
"Links" : {
|
||||
"Plantu": "http://www.bedetheque.com/auteur-5996-BD-Plantu.html",
|
||||
"\u003cN\u0026B\u003e": "http://www.bedetheque.com/auteur-477-BD-NB.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 19762,
|
||||
"ISBN": "2869679858",
|
||||
"Series": "Darken",
|
||||
"Title": "Mangeforêt",
|
||||
"série": "Darken",
|
||||
"titre": "Mangeforêt",
|
||||
"Num": 2,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Vents d'Ouest",
|
||||
"Collection": "",
|
||||
"SatID": "DARK-2",
|
||||
"éditeur": "Vents d'Ouest",
|
||||
"collection": "",
|
||||
"ref": "DARK-2",
|
||||
"LegalDeposit": "2002-09-01T00:00:00Z",
|
||||
"PrintDate": "2002-09-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-06T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Darken02_22102002.jpg",
|
||||
"Description": "Kelmar le Darken a retrouvé Lorik, son frère, engagé dans la résistance au Nouvel Ordre Humain. Celui-ci aurait découvert l'endroit où leur mère est tenue prisonnière : le Mangeforêt, un monstre mécanique qui défriche la forêt héossienne et sert de bagne aux autochtones récalcitrants. Mais pour les chefs de la résistance, ce n'est pas un objectif prioritaire. Alors Kelmar part à l'assaut de la machine avec Langue Agile la voleuse feling, Doonda la Woon, et une poignée d'enfants-soldats. Et s'il avait été prévu dès le début... Lire la suite",
|
||||
"description": "Kelmar le Darken a retrouvé Lorik, son frère, engagé dans la résistance au Nouvel Ordre Humain. Celui-ci aurait découvert l'endroit où leur mère est tenue prisonnière : le Mangeforêt, un monstre mécanique qui défriche la forêt héossienne et sert de bagne aux autochtones récalcitrants. Mais pour les chefs de la résistance, ce n'est pas un objectif prioritaire. Alors Kelmar part à l'assaut de la machine avec Langue Agile la voleuse feling, Doonda la Woon, et une poignée d'enfants-soldats. Et s'il avait été prévu dès le début... Lire la suite",
|
||||
"Note": 5,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Polouchine, Igor",
|
||||
"Target": "http://www.bedetheque.com/auteur-2556-BD-Polouchine-Igor.html"
|
||||
},
|
||||
{
|
||||
"Title": "Rastoin, Bernard",
|
||||
"Target": "http://www.bedetheque.com/auteur-31834-BD-Rastoin-Bernard.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Polouchine, Igor",
|
||||
"Rastoin, Bernard"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Swal, Christophe",
|
||||
"Target": "http://www.bedetheque.com/auteur-2557-BD-Swal-Christophe.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Swal, Christophe"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Robert, Jacky",
|
||||
"Target": "http://www.bedetheque.com/auteur-820-BD-Robert-Jacky.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Robert, Jacky"
|
||||
],
|
||||
"Links": {
|
||||
"Polouchine, Igor": "http://www.bedetheque.com/auteur-2556-BD-Polouchine-Igor.html",
|
||||
"Rastoin, Bernard": "http://www.bedetheque.com/auteur-31834-BD-Rastoin-Bernard.html",
|
||||
"Swal, Christophe": "http://www.bedetheque.com/auteur-2557-BD-Swal-Christophe.html",
|
||||
"Robert, Jacky": "http://www.bedetheque.com/auteur-820-BD-Robert-Jacky.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 9935,
|
||||
"ISBN": "2-8001-1956-X",
|
||||
"Series": "Bizu",
|
||||
"Title": "La croisière fantôme",
|
||||
"série": "Bizu",
|
||||
"titre": "La croisière fantôme",
|
||||
"Num": 5,
|
||||
"NumA": "3",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Dupuis",
|
||||
"Collection": "",
|
||||
"SatID": "ZJE-17",
|
||||
"éditeur": "Dupuis",
|
||||
"collection": "",
|
||||
"ref": "ZJE-17",
|
||||
"LegalDeposit": "1992-10-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-10-31T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/bizu05.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 3,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Fournier, Jean-Claude",
|
||||
"Target": "http://www.bedetheque.com/auteur-755-BD-Fournier-Jean-Claude.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Fournier, Jean-Claude"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Fournier, Jean-Claude",
|
||||
"Target": "http://www.bedetheque.com/auteur-755-BD-Fournier-Jean-Claude.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Fournier, Jean-Claude"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "D'Authenay, Anne-Marie",
|
||||
"Target": "http://www.bedetheque.com/auteur-550-BD-D-Authenay-Anne-Marie.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"D'Authenay, Anne-Marie"
|
||||
],
|
||||
"Links": {
|
||||
"Fournier, Jean-Claude": "http://www.bedetheque.com/auteur-755-BD-Fournier-Jean-Claude.html",
|
||||
"D'Authenay, Anne-Marie":"http://www.bedetheque.com/auteur-550-BD-D-Authenay-Anne-Marie.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 164,
|
||||
"ISBN": "2723414132",
|
||||
"Series": "Eaux de Mortelune (Les)",
|
||||
"Title": "Vague à lames",
|
||||
"série": "Eaux de Mortelune (Les)",
|
||||
"titre": "Vague à lames",
|
||||
"Num": 5,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Glénat",
|
||||
"Collection": "Caractère",
|
||||
"SatID": "EAU-5",
|
||||
"éditeur": "Glénat",
|
||||
"collection": "Caractère",
|
||||
"ref": "EAU-5",
|
||||
"LegalDeposit": "1992-02-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-06T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_164.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 3.9,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Cothias, Patrick",
|
||||
"Target": "http://www.bedetheque.com/auteur-36-BD-Cothias-Patrick.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Cothias, Patrick"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Adamov, Philippe",
|
||||
"Target": "http://www.bedetheque.com/auteur-471-BD-Adamov-Philippe.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Adamov, Philippe"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Adamov, Philippe",
|
||||
"Target": "http://www.bedetheque.com/auteur-471-BD-Adamov-Philippe.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Adamov, Philippe"
|
||||
],
|
||||
"Links": {
|
||||
"Cothias, Patrick": "http://www.bedetheque.com/auteur-36-BD-Cothias-Patrick.html",
|
||||
"Adamov, Philippe": "http://www.bedetheque.com/auteur-471-BD-Adamov-Philippe.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 22737,
|
||||
"ISBN": "2-205-05335-3",
|
||||
"Series": "Kenya",
|
||||
"Title": "Rencontres",
|
||||
"série": "Kenya",
|
||||
"titre": "Rencontres",
|
||||
"Num": 2,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Dargaud",
|
||||
"Collection": "",
|
||||
"SatID": "KEN-2",
|
||||
"éditeur": "Dargaud",
|
||||
"collection": "",
|
||||
"ref": "KEN-2",
|
||||
"LegalDeposit": "2003-01-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-03T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/kenyaco02.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 4,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Leo",
|
||||
"Target": "http://www.bedetheque.com/auteur-97-BD-Leo.html"
|
||||
},
|
||||
{
|
||||
"Title": "Rodolphe",
|
||||
"Target": "http://www.bedetheque.com/auteur-128-BD-Rodolphe.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Leo",
|
||||
"Rodolphe"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Leo",
|
||||
"Target": "http://www.bedetheque.com/auteur-97-BD-Leo.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Leo"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Scarlett",
|
||||
"Target": "http://www.bedetheque.com/auteur-1296-BD-Scarlett.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Scarlett"
|
||||
],
|
||||
"Links": {
|
||||
"Leo": "http://www.bedetheque.com/auteur-97-BD-Leo.html",
|
||||
"Rodolphe": "http://www.bedetheque.com/auteur-128-BD-Rodolphe.html",
|
||||
"Scarlett": "http://www.bedetheque.com/auteur-1296-BD-Scarlett.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 32043,
|
||||
"ISBN": "2226144196",
|
||||
"Series": "Accros de ...",
|
||||
"Title": "Rap",
|
||||
"série": "Accros de ...",
|
||||
"titre": "Rap",
|
||||
"Num": 2,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Albin Michel",
|
||||
"Collection": "",
|
||||
"SatID": "ACC-2",
|
||||
"éditeur": "Albin Michel",
|
||||
"collection": "",
|
||||
"ref": "ACC-2",
|
||||
"LegalDeposit": "2003-12-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-04T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/accrocderap.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": -1,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Harty",
|
||||
"Target": "http://www.bedetheque.com/auteur-6505-BD-Harty.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Harty"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Joan",
|
||||
"Target": "http://www.bedetheque.com/auteur-4285-BD-Joan.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Joan"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Ptiluc",
|
||||
"Target": "http://www.bedetheque.com/auteur-125-BD-Ptiluc.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Ptiluc"
|
||||
],
|
||||
"Links": {
|
||||
"Harty": "http://www.bedetheque.com/auteur-6505-BD-Harty.html",
|
||||
"Joan": "http://www.bedetheque.com/auteur-4285-BD-Joan.html",
|
||||
"Ptiluc": "http://www.bedetheque.com/auteur-125-BD-Ptiluc.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 46005,
|
||||
"ISBN": "",
|
||||
"Series": "Chick Bill",
|
||||
"Title": "Le témoin du Rio Grande",
|
||||
"série": "Chick Bill",
|
||||
"titre": "Le témoin du Rio Grande",
|
||||
"Num": 23,
|
||||
"NumA": "40",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Lombard",
|
||||
"Collection": "",
|
||||
"SatID": "CHI-23",
|
||||
"éditeur": "Lombard",
|
||||
"collection": "",
|
||||
"ref": "CHI-23",
|
||||
"LegalDeposit": "1978-03-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-06T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_46005.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 3,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Tibet",
|
||||
"Target": "http://www.bedetheque.com/auteur-1791-BD-Tibet.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Tibet"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Tibet",
|
||||
"Target": "http://www.bedetheque.com/auteur-1791-BD-Tibet.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Tibet"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Tibet",
|
||||
"Target": "http://www.bedetheque.com/auteur-1791-BD-Tibet.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Tibet"
|
||||
],
|
||||
"Links": {
|
||||
"Tibet": "http://www.bedetheque.com/auteur-1791-BD-Tibet.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 15875,
|
||||
"ISBN": "2-226-04878-2",
|
||||
"Series": "Donc, Jean",
|
||||
"Title": "...donc, Jean.",
|
||||
"série": "Donc, Jean",
|
||||
"titre": "...donc, Jean.",
|
||||
"Num": -1,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Albin Michel",
|
||||
"Collection": "L'Écho des Savanes",
|
||||
"SatID": "VEY-09",
|
||||
"éditeur": "Albin Michel",
|
||||
"collection": "L'Écho des Savanes",
|
||||
"ref": "VEY-09",
|
||||
"LegalDeposit": "1990-10-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-12-02T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_15875.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 4,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Veyron, Martin",
|
||||
"Target": "http://www.bedetheque.com/auteur-1491-BD-Veyron-Martin.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Veyron, Martin"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Veyron, Martin",
|
||||
"Target": "http://www.bedetheque.com/auteur-1491-BD-Veyron-Martin.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Veyron, Martin"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "\u003cBichromie\u003e",
|
||||
"Target": "http://www.bedetheque.com/auteur-6563-BD-Bichromie.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"\u003cBichromie\u003e"
|
||||
],
|
||||
"Links": {
|
||||
"Veyron, Martin": "http://www.bedetheque.com/auteur-1491-BD-Veyron-Martin.html",
|
||||
"\u003cBichromie\u003e": "http://www.bedetheque.com/auteur-6563-BD-Bichromie.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 84448,
|
||||
"ISBN": "978-2-353-57030-0",
|
||||
"Series": "Black Crow",
|
||||
"Title": "Black Crow raconte L'Hermione - La Conspiration pour la liberté",
|
||||
"série": "Black Crow",
|
||||
"titre": "Black Crow raconte L'Hermione - La Conspiration pour la liberté",
|
||||
"Num": -1,
|
||||
"NumA": "HS",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Glénat",
|
||||
"Collection": "Chasse-marée",
|
||||
"SatID": "CROW-HS",
|
||||
"éditeur": "Glénat",
|
||||
"collection": "Chasse-marée",
|
||||
"ref": "CROW-HS",
|
||||
"LegalDeposit": "2009-02-01T00:00:00Z",
|
||||
"PrintDate": "2009-03-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-10-14T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/84448_c.jpg",
|
||||
"Description": "À travers l’histoire d’une frégate, devenez le témoin de l’indépendance du peuple américain au siècle des lumières. En 1778, dans l'arsenal de Rochefort la frégate L’Hermione est mise en chantier d’après les plans de l’ingénieur Chevillard Aîné. Pendant près d’un an, charpentiers, perceurs, calfats, forgerons et bagnards se relaient pour construire ce navire de près de 45 mètres, doté d’une voilure de 1500 m2, de 26 canons pouvant tirer des boulets de 12 livres. En 1779, Gilbert Motier, marquis de La Fayette, cherche... Lire la suite",
|
||||
"description": "À travers l’histoire d’une frégate, devenez le témoin de l’indépendance du peuple américain au siècle des lumières. En 1778, dans l'arsenal de Rochefort la frégate L’Hermione est mise en chantier d’après les plans de l’ingénieur Chevillard Aîné. Pendant près d’un an, charpentiers, perceurs, calfats, forgerons et bagnards se relaient pour construire ce navire de près de 45 mètres, doté d’une voilure de 1500 m2, de 26 canons pouvant tirer des boulets de 12 livres. En 1779, Gilbert Motier, marquis de La Fayette, cherche... Lire la suite",
|
||||
"Note": 3.7,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Delitte, Jean-Yves",
|
||||
"Target": "http://www.bedetheque.com/auteur-808-BD-Delitte-Jean-Yves.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Delitte, Jean-Yves"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Delitte, Jean-Yves",
|
||||
"Target": "http://www.bedetheque.com/auteur-808-BD-Delitte-Jean-Yves.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Delitte, Jean-Yves"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Delitte, Jean-Yves",
|
||||
"Target": "http://www.bedetheque.com/auteur-808-BD-Delitte-Jean-Yves.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Delitte, Jean-Yves"
|
||||
],
|
||||
"Links": {
|
||||
"Delitte, Jean-Yves":"http://www.bedetheque.com/auteur-808-BD-Delitte-Jean-Yves.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 160366,
|
||||
"ISBN": "978-2-8001-5099-4",
|
||||
"Series": "Ralph Azham",
|
||||
"Title": "Noires sont les étoiles",
|
||||
"série": "Ralph Azham",
|
||||
"titre": "Noires sont les étoiles",
|
||||
"Num": 3,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Dupuis",
|
||||
"Collection": "Dupuis ",
|
||||
"SatID": "RALP-03",
|
||||
"éditeur": "Dupuis",
|
||||
"collection": "Dupuis ",
|
||||
"ref": "RALP-03",
|
||||
"LegalDeposit": "2012-04-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2014-03-31T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_160366.jpg",
|
||||
"Description": "Ralph, toujours accompagné par les magiciens Yassou et maître Migachi, a décidé de voler la couronne de Tanghor, dont le pouvoir pourrait rendre la mémoire à sa soeur. Il s'associe à trois voleurs rencontrés sur le bord de la route et se rend à Onophalae, où la couronne magique est conservée en haut d'un pic particulièrement bien protégé. Du moins pour le commun des mortels, car rien ne résiste aux méthodes non- conventionnelles de Ralph. De son côté, le père de Ralph, qui a survécu à l'effondrement du barrage, s'installe à... Lire la suite",
|
||||
"description": "Ralph, toujours accompagné par les magiciens Yassou et maître Migachi, a décidé de voler la couronne de Tanghor, dont le pouvoir pourrait rendre la mémoire à sa soeur. Il s'associe à trois voleurs rencontrés sur le bord de la route et se rend à Onophalae, où la couronne magique est conservée en haut d'un pic particulièrement bien protégé. Du moins pour le commun des mortels, car rien ne résiste aux méthodes non- conventionnelles de Ralph. De son côté, le père de Ralph, qui a survécu à l'effondrement du barrage, s'installe à... Lire la suite",
|
||||
"Note": 4.1,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Trondheim, Lewis",
|
||||
"Target": "http://www.bedetheque.com/auteur-145-BD-Trondheim-Lewis.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Trondheim, Lewis"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Trondheim, Lewis",
|
||||
"Target": "http://www.bedetheque.com/auteur-145-BD-Trondheim-Lewis.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Trondheim, Lewis"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Findakly, Brigitte",
|
||||
"Target": "http://www.bedetheque.com/auteur-1382-BD-Findakly-Brigitte.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Findakly, Brigitte"
|
||||
],
|
||||
"Links": {
|
||||
"Trondheim, Lewis": "http://www.bedetheque.com/auteur-145-BD-Trondheim-Lewis.html",
|
||||
"Findakly, Brigitte": "http://www.bedetheque.com/auteur-1382-BD-Findakly-Brigitte.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 754,
|
||||
"ISBN": "2-7234-1576-7",
|
||||
"Series": "Max",
|
||||
"Title": "Bleu d'orient",
|
||||
"série": "Max",
|
||||
"titre": "Bleu d'orient",
|
||||
"Num": 2,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Glénat",
|
||||
"Collection": "Grafica",
|
||||
"SatID": "MAX-2",
|
||||
"éditeur": "Glénat",
|
||||
"collection": "Grafica",
|
||||
"ref": "MAX-2",
|
||||
"LegalDeposit": "1993-05-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-03T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_754.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": -1,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Bruyninx, Marc",
|
||||
"Target": "http://www.bedetheque.com/auteur-17-BD-Bruyninx-Marc.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Bruyninx, Marc"
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Bruyninx, Marc",
|
||||
"Target": "http://www.bedetheque.com/auteur-17-BD-Bruyninx-Marc.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Bruyninx, Marc"
|
||||
],
|
||||
"Links": {
|
||||
"Bruyninx, Marc": "http://www.bedetheque.com/auteur-17-BD-Bruyninx-Marc.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"ID": 52100,
|
||||
"ISBN": "2849461008",
|
||||
"Series": "Yiu",
|
||||
"Title": "La chute de l'empire évangéliste",
|
||||
"série": "Yiu",
|
||||
"titre": "La chute de l'empire évangéliste",
|
||||
"Num": 5,
|
||||
"NumA": "",
|
||||
"State": 0,
|
||||
"Author": "",
|
||||
"Editor": "Soleil Productions",
|
||||
"Collection": "",
|
||||
"SatID": "YIU-5",
|
||||
"éditeur": "Soleil Productions",
|
||||
"collection": "",
|
||||
"ref": "YIU-5",
|
||||
"LegalDeposit": "2005-11-01T00:00:00Z",
|
||||
"PrintDate": "0001-01-01T00:00:00Z",
|
||||
"PurchaseDate": "2013-09-04T00:00:00Z",
|
||||
"CoverURL": "http://www.bedetheque.com/media/Couvertures/Couv_52100.jpg",
|
||||
"Description": "",
|
||||
"description": "",
|
||||
"Note": 4.4,
|
||||
"Scenarist": [
|
||||
{
|
||||
"Title": "Téhy",
|
||||
"Target": "http://www.bedetheque.com/auteur-205-BD-Tehy.html"
|
||||
},
|
||||
{
|
||||
"Title": "Vee, J.M.",
|
||||
"Target": "http://www.bedetheque.com/auteur-8231-BD-Vee-JM.html"
|
||||
}
|
||||
"scenario": [
|
||||
"Téhy",
|
||||
"Vee, J.M."
|
||||
],
|
||||
"Designer": [
|
||||
{
|
||||
"Title": "Guénet, Nicolas",
|
||||
"Target": "http://www.bedetheque.com/auteur-2601-BD-Guenet-Nicolas.html"
|
||||
}
|
||||
"dessins": [
|
||||
"Guénet, Nicolas"
|
||||
],
|
||||
"Colorist": [
|
||||
{
|
||||
"Title": "Guénet, Nicolas",
|
||||
"Target": "http://www.bedetheque.com/auteur-2601-BD-Guenet-Nicolas.html"
|
||||
}
|
||||
"couleurs": [
|
||||
"Guénet, Nicolas"
|
||||
],
|
||||
"Links" : {
|
||||
"Téhy": "http://www.bedetheque.com/auteur-205-BD-Tehy.html",
|
||||
"Vee, J.M.": "http://www.bedetheque.com/auteur-8231-BD-Vee-JM.html",
|
||||
"Guénet, Nicolas": "http://www.bedetheque.com/auteur-2601-BD-Guenet-Nicolas.html"
|
||||
},
|
||||
"FetchDate": "0001-01-01T00:00:00Z"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user