commit af08e14b886179da14f4dfc42ebe501c06e9bbfb Author: Bartuccio Antoine Date: Sat May 9 00:09:51 2020 +0200 Monde de merde diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..b5ea0d8 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,40 @@ +kind: pipeline +type: docker +name: default + +steps: +- name: build + image: golang:1.14 + commands: + - go build + +- name: publish + image: plugins/docker + settings: + repo: klmp200/abitbol + username: + from_secret: docker_username + password: + from_secret: docker_password + when: + branch: master + event: push + +- name: deploy + image: appleboy/drone-ssh + environment: + SSH_PASSWORD: + from_secret: ssh_password + settings: + host: + from_secret: ssh_host + username: + from_secret: ssh_username + password: + from_secret: ssh_password + envs: [ SSH_PASSWORD ] + script: + - echo $SSH_PASSWORD | sudo -S systemctl restart abitbol-bot + when: + branch: master + event: push diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fc27039 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM golang:1.14 AS builder + +RUN mkdir /build +WORKDIR /build + +# Copy the code from the host and compile it +COPY . . + +RUN go build + +RUN mkdir res +COPY quotes.json res/quotes.json + +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix nocgo -o /app . + +# We use Alpine for it's ca-certificates needed by http lib +FROM alpine:latest +RUN apk add --no-cache ca-certificates apache2-utils +COPY --from=builder /app ./ +COPY --from=builder /build/res ./ + + +ENTRYPOINT ["./app"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..1a4c21b --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Le bot le plus classe du monde + +[![Build Status](https://drone.klmp200.net/api/badges/klmp200/abitbol/status.svg)](https://drone.klmp200.net/klmp200/abitbol) + +```bash +TELEGRAM_TOKEN="token super secret" ./abitbol +``` \ No newline at end of file diff --git a/abitbol b/abitbol new file mode 100755 index 0000000..c205dbf Binary files /dev/null and b/abitbol differ diff --git a/bot.go b/bot.go new file mode 100644 index 0000000..b42a550 --- /dev/null +++ b/bot.go @@ -0,0 +1,165 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "os" + "strconv" + "strings" + "time" + + "github.com/gocolly/colly" + tb "gopkg.in/tucnak/telebot.v2" +) + +const ( + dbFile = "quotes.json" +) + +// Quote represent a quote of the flim +type Quote struct { + Quote string `json:"quote"` + YoutubeKey string `json:"youtube_key"` +} + +// ThumbURL get url of the thumbnail +func (q *Quote) ThumbURL() string { + return fmt.Sprintf( + "https://img.youtube.com/vi/%s/0.jpg", + q.YoutubeKey, + ) + +} + +// VideoURL get url of the video +func (q *Quote) VideoURL() string { + return fmt.Sprintf( + "https://www.youtube.com/watch?v=%s", + q.YoutubeKey, + ) +} + +func main() { + var quotes []Quote + + // Load quote database + file, err := os.Open(dbFile) + if err != nil { + log.Fatalf("Could not open quote file: %s\n", err) + return + } + defer file.Close() + + bytes, err := ioutil.ReadAll(file) + if err != nil { + log.Fatalf("Could not read quote file: %s\n", err) + return + } + + if err = json.Unmarshal(bytes, "es); err != nil { + log.Fatalf("Could not Unmarshal quote file: %s\n", err) + return + } + + // Index quote database + index, err := indexQuotes(quotes) + if err != nil { + log.Fatalf("Could not index quotes: %s\n", err) + return + } + + // Load telegram bot + b, err := tb.NewBot(tb.Settings{ + Token: os.Getenv("TELEGRAM_TOKEN"), + Poller: &tb.LongPoller{Timeout: 10 * time.Second}, + }) + if err != nil { + log.Fatalf("Colud not connect to telegram: %s\n", err) + return + } + + // Add bot capabilities + b.Handle(tb.OnQuery, func(q *tb.Query) { + quotes, err := index.Search(q.Text) + if err != nil { + log.Println("Pas de fichier citation trouvé") + return + } + results := make(tb.Results, len(quotes)) + for i, quote := range quotes { + url := quote.VideoURL() + thumb := quote.ThumbURL() + log.Printf("{%s, %s}\n", url, thumb) + results[i] = &tb.VideoResult{ + URL: url, + MIME: "text/html", + ThumbURL: thumb, + Title: quote.Quote, + } + results[i].SetContent( + &tb.InputTextMessageContent{ + Text: fmt.Sprintf( + "%s\n\n%s", + quote.Quote, + url, + ), + ParseMode: tb.ModeHTML, + DisablePreview: false, + }, + ) + results[i].SetResultID(strconv.Itoa(i)) + } + err = b.Answer(q, &tb.QueryResponse{ + Results: results, + SwitchPMParameter: "Ajoute moi", + CacheTime: 0, // One minut + }) + + if err != nil { + log.Println(err) + } + }) + + // Start bot + log.Println("Bot started") + b.Start() +} + +// Update get a fresh list of quotes from george-abitbol.fr +func Update() error { + var videos []Quote + + c := colly.NewCollector( + colly.AllowedDomains("george-abitbol.fr"), + ) + + // Find and visit all links + c.OnHTML("img[data-original]", func(e *colly.HTMLElement) { + videos = append( + videos, + Quote{ + Quote: e.Attr("alt"), + YoutubeKey: strings.Split(e.Attr("data-original"), "/")[4], + }, + ) + }) + + c.Visit("http://george-abitbol.fr") + + file, err := os.Create(dbFile) + if err != nil { + return fmt.Errorf("could not create quotes files: %w", err) + } + defer file.Close() + + bytes, err := json.Marshal(&videos) + if err != nil { + return fmt.Errorf("could not marshal quotes: %w", err) + } + + file.Write(bytes) + + return nil +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1fc27d3 --- /dev/null +++ b/go.mod @@ -0,0 +1,18 @@ +module klmp200.net/klmp200/abitbol + +go 1.14 + +require ( + github.com/PuerkitoBio/goquery v1.5.1 // indirect + github.com/antchfx/htmlquery v1.2.3 // indirect + github.com/antchfx/xmlquery v1.2.4 // indirect + github.com/blevesearch/bleve v1.0.7 + github.com/gobwas/glob v0.2.3 // indirect + github.com/gocolly/colly v1.2.0 + github.com/kennygrant/sanitize v1.2.4 // indirect + github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect + github.com/temoto/robotstxt v1.1.1 // indirect + golang.org/x/net v0.0.0-20200506145744-7e3656a0809f // indirect + google.golang.org/appengine v1.6.6 // indirect + gopkg.in/tucnak/telebot.v2 v2.0.0-20200426184946-59629fe0483e +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..5f19497 --- /dev/null +++ b/go.sum @@ -0,0 +1,139 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/RoaringBitmap/roaring v0.4.21 h1:WJ/zIlNX4wQZ9x8Ey33O1UaD9TCTakYsdLFSBcTwH+8= +github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= +github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= +github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/antchfx/htmlquery v1.2.3 h1:sP3NFDneHx2stfNXCKbhHFo8XgNjCACnU/4AO5gWz6M= +github.com/antchfx/htmlquery v1.2.3/go.mod h1:B0ABL+F5irhhMWg54ymEZinzMSi0Kt3I2if0BLYa3V0= +github.com/antchfx/xmlquery v1.2.4 h1:T/SH1bYdzdjTMoz2RgsfVKbM5uWh3gjDYYepFqQmFv4= +github.com/antchfx/xmlquery v1.2.4/go.mod h1:KQQuESaxSlqugE2ZBcM/qn+ebIpt+d+4Xx7YcSGAIrM= +github.com/antchfx/xpath v1.1.6 h1:6sVh6hB5T6phw1pFpHRQ+C4bd8sNI+O58flqtg7h0R0= +github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/blevesearch/bleve v1.0.7 h1:4PspZE7XABMSKcVpzAKp0E05Yer1PIYmTWk+1ngNr/c= +github.com/blevesearch/bleve v1.0.7/go.mod h1:3xvmBtaw12Y4C9iA1RTzwWCof5j5HjydjCTiDE2TeE0= +github.com/blevesearch/blevex v0.0.0-20190916190636-152f0fe5c040/go.mod h1:WH+MU2F4T0VmSdaPX+Wu5GYoZBrYWdOZWSjzvYcDmqQ= +github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= +github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= +github.com/blevesearch/mmap-go v1.0.2 h1:JtMHb+FgQCTTYIhtMvimw15dJwu1Y5lrZDMOFXVWPk0= +github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= +github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac= +github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= +github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= +github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= +github.com/blevesearch/zap/v11 v11.0.7 h1:nnmAOP6eXBkqEa1Srq1eqA5Wmn4w+BZjLdjynNxvd+M= +github.com/blevesearch/zap/v11 v11.0.7/go.mod h1:bJoY56fdU2m/IP4LLz/1h4jY2thBoREvoqbuJ8zhm9k= +github.com/blevesearch/zap/v12 v12.0.7 h1:y8FWSAYkdc4p1dn4YLxNNr1dxXlSUsakJh2Fc/r6cj4= +github.com/blevesearch/zap/v12 v12.0.7/go.mod h1:70DNK4ZN4tb42LubeDbfpp6xnm8g3ROYVvvZ6pEoXD8= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/couchbase/ghistogram v0.1.0/go.mod h1:s1Jhy76zqfEecpNWJfWUiKZookAFaiGOEoyzgHt9i7k= +github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= +github.com/couchbase/vellum v1.0.1 h1:qrj9ohvZedvc51S5KzPfJ6P6z0Vqzv7Lx7k3mVc2WOk= +github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 h1:Ujru1hufTHVb++eG6OuNDKMxZnGIvF6o/u8q/8h2+I4= +github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gocolly/colly v1.2.0 h1:qRz9YAn8FIH0qzgNUw+HT9UN7wm1oF9OBAilwEWpyrI= +github.com/gocolly/colly v1.2.0/go.mod h1:Hof5T3ZswNVsOHYmba1u03W65HDWgpV5HifSuueE0EA= +github.com/gocolly/colly/v2 v2.0.1 h1:GGPzBEdrEsavhzVK00FQXMMHBHRpwrbbCCcEKM/0Evw= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kennygrant/sanitize v1.2.4 h1:gN25/otpP5vAsO2djbMhF/LQX6R7+O1TB4yv8NzpJ3o= +github.com/kennygrant/sanitize v1.2.4/go.mod h1:LGsjYYtgxbetdg5owWB2mpgUL6e2nfw2eObZ0u0qvak= +github.com/kljensen/snowball v0.6.0/go.mod h1:27N7E8fVU5H68RlUmnWwZCfxgt4POBJfENGMvNRhldw= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI= +github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/steveyen/gtreap v0.1.0 h1:CjhzTa274PyJLJuMZwIzCO1PfC00oRa8d1Kc78bFXJM= +github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/temoto/robotstxt v1.1.1 h1:Gh8RCs8ouX3hRSxxK7B1mO5RFByQ4CmJZDwgom++JaA= +github.com/temoto/robotstxt v1.1.1/go.mod h1:+1AmkuG3IYkh1kv0d2qEB9Le88ehNO0zwOr3ujewlOo= +github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= +github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc= +github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/tucnak/telebot.v2 v2.0.0-20200426184946-59629fe0483e h1:b9xwpngyOzAgWsFzw+kknHd/XZAnEsohHcGfu+z/LZA= +gopkg.in/tucnak/telebot.v2 v2.0.0-20200426184946-59629fe0483e/go.mod h1:+2HaHCMjzfvC3MVOSmgRKeAPruYl4PEcSxywvP8GipU= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/index.go b/index.go new file mode 100644 index 0000000..f31e6f6 --- /dev/null +++ b/index.go @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" + "log" + + "github.com/blevesearch/bleve" +) + +// QuoteIndex index of quotes +type QuoteIndex struct { + index bleve.Index + Videos []Quote + videoByKey map[string]Quote //videoByKey[youtubeKey] +} + +// Search search quote in index +func (si *QuoteIndex) Search(str string) ([]Quote, error) { + var resp []Quote + + query := bleve.NewMatchQuery(str) + req := bleve.NewSearchRequest(query) + searchResults, err := si.index.Search(req) + if err != nil { + return nil, fmt.Errorf("Request error %w", err) + } + for _, hit := range searchResults.Hits { + if sound, ok := si.videoByKey[hit.ID]; ok { + resp = append(resp, sound) + } + } + + if len(resp) == 0 { + return nil, fmt.Errorf("Quote not found") + } + + return resp, nil +} + +func indexQuotes(quotes []Quote) (*QuoteIndex, error) { + quoteMap := make(map[string]Quote) + + mapping := bleve.NewIndexMapping() + mapping.DefaultAnalyzer = mapping.FieldAnalyzer("french") + index, err := bleve.NewMemOnly(mapping) + if err != nil { + return nil, fmt.Errorf("Could not creat index: %w", err) + } + + for _, quote := range quotes { + if index.Index(quote.YoutubeKey, quote.Quote) != nil { + log.Printf("Error indexing %v\n", quote.Quote) + } + quoteMap[quote.YoutubeKey] = quote + } + + return &QuoteIndex{ + index, + quotes, + quoteMap, + }, nil +} diff --git a/quotes.json b/quotes.json new file mode 100644 index 0000000..3c6ede6 --- /dev/null +++ b/quotes.json @@ -0,0 +1,1142 @@ +[ + { + "quote": "Attention, ce flim n'est pas un flim sur le cyclimse", + "youtube_key": "u0IF1ZayMXQ" + }, + { + "quote": "Entre l'Australia et la South Am\u00e9rica : l'atoll de Pom Pom Galli", + "youtube_key": "UmFERtl-o8E" + }, + { + "quote": "V12 appelle le capitaine George Abitbol", + "youtube_key": "TlyLul1_XLo" + }, + { + "quote": "Ah, voil\u00e0 enfin le roi de la classe ! L'homme trop bien sap\u00e9, Abitbol !", + "youtube_key": "Ee7qT76rwEc" + }, + { + "quote": "Tu baises les m\u00e9nag\u00e8res, bien, tu dois avoir le cul qui brille", + "youtube_key": "Vdr5Yf0AeGU" + }, + { + "quote": "Eh, je t'arr\u00eate tout de suite. La classe, c'est d'\u00eatre chic dans sa mani\u00e8re de s'habiller", + "youtube_key": "HAV1gNzKLAY" + }, + { + "quote": "Excuse-moi de te dire \u00e7a, mon pauvre Jos\u00e9, mais tu confonds un peu tout", + "youtube_key": "AzmirEvT778" + }, + { + "quote": "La vache ! Moi, j'ai l'air has been ?", + "youtube_key": "rbj6WVnquVM" + }, + { + "quote": "Tu n'es vraiment pas tr\u00e8s sympa", + "youtube_key": "SXdpu6Yx2MI" + }, + { + "quote": "Bien ! Consid\u00e8re qu'on n'est plus amis, Abitbol !", + "youtube_key": "tRViqxmdrrk" + }, + { + "quote": "Tiens, regarde ! Les Anglais ont d\u00e9barqu\u00e9 !", + "youtube_key": "Bfk2sn7_1H0" + }, + { + "quote": "Oh, George ! Quel po\u00e8te, vous me surprenez", + "youtube_key": "PZwiPHGG-f0" + }, + { + "quote": "Abritons-nous, \u00e7a va pas tarder \u00e0 p\u00e9ter !", + "youtube_key": "jq-dY0NPTo8" + }, + { + "quote": "Bon V12 c'est quoi ce bordel alors ?", + "youtube_key": "9N4T_LtD9So" + }, + { + "quote": "Bon, je vais chercher des serviettes-\u00e9ponges avec des imprim\u00e9s dessus", + "youtube_key": "IBalQeo-4HM" + }, + { + "quote": "Faut pas laisser \u00e7a comme \u00e7a les enfants !", + "youtube_key": "65T1Z0ut51I" + }, + { + "quote": "Aah... Monde de merde", + "youtube_key": "h6zyHKwXqkc" + }, + { + "quote": "La disparition subite de George Abitbol", + "youtube_key": "LFvJzFmkywM" + }, + { + "quote": "Et maintenant, un petit peu de musique avec Alain Souchon", + "youtube_key": "zY_Iz6vaHiQ" + }, + { + "quote": "Salopes !", + "youtube_key": "SrASuimLymo" + }, + { + "quote": "On pr\u00e9pare un dossier sur George Abitbol", + "youtube_key": "IUD-zVYRiDM" + }, + { + "quote": "Mais pourquoi je peux pas travailler seul ?", + "youtube_key": "fLvCHEsXwb4" + }, + { + "quote": "Ce charlot ? Je savais pas qu'il existait encore", + "youtube_key": "8T1WqucXX1c" + }, + { + "quote": "C'est mon fils, mon fiston. Je sais pas pourquoi, il s'est attach\u00e9 \u00e0 moi", + "youtube_key": "ABUipLllZ9Y" + }, + { + "quote": "O\u00f9 vous en \u00eates avec la n\u00e9cro de George Abitbol ?", + "youtube_key": "hEl89wCjVTY" + }, + { + "quote": "Ses derni\u00e8res paroles c'est \"monde de merde\". Pourquoi ?", + "youtube_key": "ZbLQbiJg-DQ" + }, + { + "quote": "Si c'est un cheval je veux savoir dans quelle course", + "youtube_key": "1OZU-bFaGxA" + }, + { + "quote": "Bonjour. C'est moi, Orson Welles", + "youtube_key": "qOYO2wvHBL8" + }, + { + "quote": "J'aime pas trop les voleurs et les fils de pute", + "youtube_key": "TQQ9FwKnKwA" + }, + { + "quote": "J'appelle \u00e7a du plagiat", + "youtube_key": "5deEr6WQHXY" + }, + { + "quote": "Rosebud !", + "youtube_key": "nfINygjeTho" + }, + { + "quote": "Vous savez qu'il a v\u00e9cu au Texas la moiti\u00e9 de sa vie", + "youtube_key": "nVpyjG9CqD8" + }, + { + "quote": "Bravo, quel enthousiasme !", + "youtube_key": "SzpxhNwp9I0" + }, + { + "quote": "Autant qu'il serve \u00e0 quelque chose... ce gros porc !", + "youtube_key": "xNgsaFjvH24" + }, + { + "quote": "C'est mon fils, ma bataille", + "youtube_key": "m_TJBQiI5qI" + }, + { + "quote": "C'est vous qui m'avez trait\u00e9e de connasse ?", + "youtube_key": "TFCZ9DadYcQ" + }, + { + "quote": "Vous dites que j'aille me faire foutre ? Euh OK, j'y vais", + "youtube_key": "sAMTOx51iWI" + }, + { + "quote": "Bonjour Monsieur, vous cherchez quelque chose ?", + "youtube_key": "GJXsIzytWQA" + }, + { + "quote": "Il y avait rien de sexuel entre nous", + "youtube_key": "aDl-pfgyusI" + }, + { + "quote": "Je me suis souvent fait traiter de p\u00e9dale, de salope", + "youtube_key": "o8rFO1fMNlk" + }, + { + "quote": "Eh, les p\u00e9d\u00e9s il y a une lettre pour vous !", + "youtube_key": "qfWRiV6wrF8" + }, + { + "quote": "Bon, il y avait quoi dans cette lettre ?", + "youtube_key": "SGIl2wXn6R4" + }, + { + "quote": "Je r\u00eave d'un bon bain dans une bonne auberge", + "youtube_key": "2AWver-qx3c" + }, + { + "quote": "Yep. Yep. Yep. Yep. Yep", + "youtube_key": "egAIcfQUOns" + }, + { + "quote": "Bon, maintenant qu'on est l\u00e0, tu vas peut-\u00eatre me dire pourquoi on est venus ?", + "youtube_key": "TzreHsrxU40" + }, + { + "quote": "Qu'est-ce que \u00e7a peut te foutre qu'il aille bien ou mal, ce t\u00e2cheron ?", + "youtube_key": "1z5l6r2Etnc" + }, + { + "quote": "Merci de m'appeler t\u00e2cheron !", + "youtube_key": "ykhMsbnmfTU" + }, + { + "quote": "C'est du steak avec des boulettes d'entre les doigts de pied", + "youtube_key": "kImP2Aq8w-0" + }, + { + "quote": "Tes excuses tu peux te les coller au cul, tout comme ton bifteck", + "youtube_key": "XIol_EOuiV0" + }, + { + "quote": "M\u00eame dans les grands restaurants on crache dans les plats", + "youtube_key": "Yqb4MLoKfv4" + }, + { + "quote": "J'ai connu un mec de droite une fois, il avait dix fois plus de classe", + "youtube_key": "46qcho2N6lE" + }, + { + "quote": "Je vous conseille d'\u00e9viter la mousse au chocolat du patron", + "youtube_key": "9WHePwJjdkk" + }, + { + "quote": "Je me suis r\u00e9veill\u00e9 amn\u00e9sique et j'arrivais plus \u00e0 me souvenir de rien", + "youtube_key": "dSLRxszVJdM" + }, + { + "quote": "Je refuse de manger des ravioles", + "youtube_key": "mR4VdhQua0c" + }, + { + "quote": "Salut, hugh ! Hugues, salut !", + "youtube_key": "q_ip21ixf24" + }, + { + "quote": "\u00c0 moins que vous vouliez que... je parte ?", + "youtube_key": "gxY0r0NqG3M" + }, + { + "quote": "On va manger des chips !", + "youtube_key": "cLFKGmybNGU" + }, + { + "quote": "George est un fasciste de merde !", + "youtube_key": "boPXjBrSEtQ" + }, + { + "quote": "C'est exact. Au temps pour moi", + "youtube_key": "wCfELEpUTdg" + }, + { + "quote": "On l'a retrouv\u00e9 assassin\u00e9 un jour. Il en est mort", + "youtube_key": "7h3rOTNEep4" + }, + { + "quote": "Dites-moi, le num\u00e9ro de votre ami Jacques, c'est bien celui qui est not\u00e9 l\u00e0 ?", + "youtube_key": "Mf7geV6cFDA" + }, + { + "quote": "C'est le 19 94 0 18 13 24 32 49 26 24 40 4 16 70933...", + "youtube_key": "sPyhEHh88tg" + }, + { + "quote": "Le num\u00e9ro qu'il t'a fil\u00e9, c'est de la connerie", + "youtube_key": "78J_DN_uCek" + }, + { + "quote": "Tu connais l'effet sp\u00e9ciau de la sonnette ?", + "youtube_key": "nx3Y7umQvNw" + }, + { + "quote": "Allo, monsieur Jacques ?", + "youtube_key": "U6DR8MK3l84" + }, + { + "quote": "Il faut pas me prendre pour la bonne poire", + "youtube_key": "NUU79wF2Mxk" + }, + { + "quote": "Attention, j'ai bien dit gentil, j'ai pas dit homosexuel, hein !", + "youtube_key": "EPhxEbFXS48" + }, + { + "quote": "Absolument", + "youtube_key": "jIWI6YeP_Ds" + }, + { + "quote": "Presse le pas, facteur, car l'amiti\u00e9 n'attend pas !", + "youtube_key": "110-tfjZhc0" + }, + { + "quote": "Nous nous m\u00eemes en route promptement", + "youtube_key": "3OqOhzkOKJQ" + }, + { + "quote": "Je vous interromps, excusez-moi, mais cet \u00e9pisode nous a d\u00e9j\u00e0 \u00e9t\u00e9 racont\u00e9", + "youtube_key": "M9bXJ3Ac_fk" + }, + { + "quote": "J'all\u00e2me voir mon ami Dino", + "youtube_key": "UFcZVVq76gg" + }, + { + "quote": "Ben Dino, mon pauvre ami ! \u00c7a n'a pas l'air d'aller bien fort", + "youtube_key": "QT2SNgprbRA" + }, + { + "quote": "Chuis limite nervous breakdown", + "youtube_key": "rT6q1JSKfM8" + }, + { + "quote": "Mais c'est pas une raison pour plus vous laver les joues, vous \u00eates malade ou quoi ?", + "youtube_key": "KyOEFJTZW2Q" + }, + { + "quote": "Ce que j'arr\u00eate, c'est les pin's, vieux. \u00c7a me fait plus marrer", + "youtube_key": "BMQkxRvnQ78" + }, + { + "quote": "Sheraf. Tu connais pas Sheraf ? C'est un groupe, ils \u00e9taient number one", + "youtube_key": "7CwBTT0zrd0" + }, + { + "quote": "Leha\u00efm !", + "youtube_key": "ti8AfdCJ0rY" + }, + { + "quote": "Ben c'est pas banal !", + "youtube_key": "LxdQ2XdSMmw" + }, + { + "quote": "\u00c7a commence \u00e0 \u00eatre pesant cette histoire de p\u00e9d\u00e9s", + "youtube_key": "D6qjmhFuYYA" + }, + { + "quote": "Casse-toi, Jacques", + "youtube_key": "pABEmQSNIGg" + }, + { + "quote": "Vous seriez pas un peu en train de me prendre pour un con, des fois ?", + "youtube_key": "hECTTkydTQE" + }, + { + "quote": "J'ai jamais \u00e9t\u00e9 homosexuel, et encore moins p\u00e9d\u00e9raste", + "youtube_key": "W9OVeBv23iM" + }, + { + "quote": "En string vous devez \u00eatre bonne", + "youtube_key": "_fxUsw2ZRAc" + }, + { + "quote": "Sois pr\u00eat. C'est bient\u00f4t l'heure", + "youtube_key": "w3BaoWkPbV8" + }, + { + "quote": "Oh ! Il est neuf heures !", + "youtube_key": "rE84uQY2yJo" + }, + { + "quote": "Sur mon front il y a pas marqu\u00e9 radio-r\u00e9veil !", + "youtube_key": "dTtW1dpdtck" + }, + { + "quote": "\u00c0 part \u00e7a, vous avez la classe !", + "youtube_key": "rSrLe8550j0" + }, + { + "quote": "Y a pas que moi qui suis p\u00e9d\u00e9, y en a un autre et il s'appelle George !", + "youtube_key": "PqIDPtPmo4g" + }, + { + "quote": "Et toi, sale parasite, casse-toi !", + "youtube_key": "ktzJ1XMoC6Q" + }, + { + "quote": "Il devait \u00eatre nerveux, le George, pour s'\u00e9nerver comme \u00e7a", + "youtube_key": "H_rDPs7XjzM" + }, + { + "quote": "George, s'excuser, imm\u00e9diatement ? Quelle classe !", + "youtube_key": "lGh9LghhLbc" + }, + { + "quote": "J'ai su que tu \u00e9tais bless\u00e9. Je suis venu m'excuser", + "youtube_key": "KBX_s17G3q0" + }, + { + "quote": "Mon plus grand plaisir serait que tu te calmes, gros blaireau", + "youtube_key": "3RqJLuNXwoY" + }, + { + "quote": "George n'a eu qu'\u00e0 vous faire un mea culpa", + "youtube_key": "4B5gJlpyu8c" + }, + { + "quote": "Dites, vous \u00eates dr\u00f4lement gentil, vous", + "youtube_key": "J0EI2XxtNiM" + }, + { + "quote": "\u00c0 quoi vous pensez si je vous dis \"monde de merde\" ?", + "youtube_key": "IQPOkMV567E" + }, + { + "quote": "Quand t'es c\u00e9l\u00e8bre, tu niques plein de gonzesses", + "youtube_key": "9GRkekDr1U8" + }, + { + "quote": "On dit \"une ouiche lorraine\"", + "youtube_key": "aiSeYhYBp7A" + }, + { + "quote": "Attention ! Quels connards ces pi\u00e9tons !", + "youtube_key": "XFqA5z28wIY" + }, + { + "quote": "Messieurs, permettez-moi de vous souhaiter la bienvenue", + "youtube_key": "3zoxGpg1DA4" + }, + { + "quote": "Nous voudrions savoir o\u00f9 vous avez connu George Abitbol", + "youtube_key": "dkJetm22aSI" + }, + { + "quote": "\u00c0 la ferme ta gueule toi, ducon", + "youtube_key": "CyKJ1d2u_nQ" + }, + { + "quote": "\u00c7a va, on vous fait pas chier, l\u00e0 ? Non mais je r\u00eave !", + "youtube_key": "bK-PTJMQm98" + }, + { + "quote": "\u00c0 l'\u00e9poque j'\u00e9tais supporter de la Juventus", + "youtube_key": "vHnH5ZA7_TA" + }, + { + "quote": "Arr\u00eate de tirer sur oim !", + "youtube_key": "1WCtmEu6myQ" + }, + { + "quote": "Baisse tes bras, c'est moi qui les l\u00e8ve", + "youtube_key": "uEMEmWQtF1o" + }, + { + "quote": "Putain je me suis mal d\u00e9merd\u00e9 ! Pourtant, j'ai pas fait une concession !", + "youtube_key": "_WWN8jN4zuI" + }, + { + "quote": "Le temps a pass\u00e9...", + "youtube_key": "UJWkPNgi7qY" + }, + { + "quote": "Mais je te reconnais, toi, je t'ai d\u00e9j\u00e0 vu quelque part", + "youtube_key": "125gobX2N9w" + }, + { + "quote": "Bon, ben lui il va me prendre la t\u00eate", + "youtube_key": "gEQnAfFMU_M" + }, + { + "quote": "\u00c7a fait plusieurs fois que je te croise. T'es toujours sur mon chemin, tu veux quoi ?", + "youtube_key": "kz7p8baQ0PA" + }, + { + "quote": "Juif arabe ? Je pr\u00e9f\u00e8re les S\u00e9farades. \u00c0 mon avis, juif et arabe c'est bizarre", + "youtube_key": "Rv97vcffxMI" + }, + { + "quote": "Je pense que t'es un ouf, toi. Un ouf malade !", + "youtube_key": "_wW9KO-lvww" + }, + { + "quote": "\u00c7a sert \u00e0 rien de discuter avec toi, t'as toujours raison", + "youtube_key": "4qU2E_R31Rc" + }, + { + "quote": "Des propos intol\u00e9rables, o\u00f9 il y a pas de tol\u00e9rance ?", + "youtube_key": "fAeQ9DpOZ50" + }, + { + "quote": "Tu sais donc pas que c'est pas bien d'\u00eatre raciste ?", + "youtube_key": "vrrsqFyNVmg" + }, + { + "quote": "J'adore les duels inoffensifs", + "youtube_key": "irgCO7GAAGw" + }, + { + "quote": "\u00c7a chauffera pour ton cul. Sale Fran\u00e7ais !", + "youtube_key": "KNiA7uXCsz8" + }, + { + "quote": "Moi je me demande quand m\u00eame s'il \u00e9tait pas un peu con", + "youtube_key": "gD6T7vvWPes" + }, + { + "quote": "Mais c'est priv\u00e9, et j'ai des principes", + "youtube_key": "0FnlQUmWxHg" + }, + { + "quote": "C'\u00e9tait un soir. J'avais le spleen, le blues...", + "youtube_key": "INBp7Llfgm0" + }, + { + "quote": "Si tu veux me parler, envoie-moi un... fax !", + "youtube_key": "T5ms8WquFMk" + }, + { + "quote": "Des apr\u00e8s-midi enti\u00e8res \u00e0 rester dans notre chambre \u00e0 se chamailler gentiment", + "youtube_key": "5lF1lbhprU4" + }, + { + "quote": "Un putain d'\u00e9nergum\u00e8ne !", + "youtube_key": "jKpzFUBuBPs" + }, + { + "quote": "Aime-moi tendre, aime-moi vrai", + "youtube_key": "iSCvYFikqGw" + }, + { + "quote": "Un pour l'argent, deux pour le spectacle, et trois pour le caillou", + "youtube_key": "5YM2DcNIMaI" + }, + { + "quote": "S'il cherchait pour du trouble, il est venu \u00e0 la bonne place", + "youtube_key": "1VJpw8Omm3c" + }, + { + "quote": "George n'est plus le m\u00eame homme", + "youtube_key": "Caxhc-nH6Q0" + }, + { + "quote": "Tu peux me dire ce qu'on fait dans ce flim, Bob ?", + "youtube_key": "shdDU3yFRjg" + }, + { + "quote": "Attention, on tourne \u00e0 droite", + "youtube_key": "w7YqtmWnPG8" + }, + { + "quote": "J'ai la m\u00e9ga chiasse, putain, la m\u00e9ga chiasse !", + "youtube_key": "KQLdQShVh34" + }, + { + "quote": "Tu poses mon bouquin d'exercices isom\u00e9triques tout de suite, merci", + "youtube_key": "XHZMyBupR4A" + }, + { + "quote": "La mort de George n'\u00e9tait pas accidentelle, il s'est fait assassiner", + "youtube_key": "u_1EQ-LIElI" + }, + { + "quote": "Eh mais t'es un minable ! Et tu te crois le meilleur journaliste du monde ?", + "youtube_key": "8DGZs_7gaLw" + }, + { + "quote": "J'te ferais dire que pendant qu'on parle, Peter il a la m\u00e9ga chiasse !", + "youtube_key": "CBZXS_zDseM" + }, + { + "quote": "Peter il fait du boucan dans les waters", + "youtube_key": "sm6Y-2tO5O4" + }, + { + "quote": "On ne peut plus rentrer dans les chiottes, il y en a partout !", + "youtube_key": "WacbV2PXYOU" + }, + { + "quote": "Patron ! Patron ! On a un probl\u00e8me, faut qu'on vous parle", + "youtube_key": "hESENADmlJg" + }, + { + "quote": "\u00c7a doit \u00eatre les burgers", + "youtube_key": "3J7CV6WrD40" + }, + { + "quote": "Tu vas aller interroger un certain Jos\u00e9", + "youtube_key": "ga5vQEl5Tzs" + }, + { + "quote": "Ce que tu vas faire, c'est que tu vas te d\u00e9guiser", + "youtube_key": "YDqV9AQnYLc" + }, + { + "quote": "Ah, un restaurant mexican food. Zeb ! C'est pas vrai !", + "youtube_key": "n5VBSPBPCfM" + }, + { + "quote": "Tu parles espagnol ? Et tu crois que tu m'impressionnes ?", + "youtube_key": "B2aFFmolCX4" + }, + { + "quote": "Est-ce que tu aimerais te b\u00e2frer un chili con carne ?", + "youtube_key": "lgu6b_GanXs" + }, + { + "quote": "Je fais un r\u00e9gime, \u00e0 base de ouiches lorraines", + "youtube_key": "nBDeXBMiLts" + }, + { + "quote": "Tu as devant toi le sp\u00e9cialiste de la ouiche lorraine", + "youtube_key": "uGlOAEKPm7U" + }, + { + "quote": "Tu pipeautes pas un peu, toi ?", + "youtube_key": "aL1MZpGJTwI" + }, + { + "quote": "George Abitbol c'\u00e9tait loin d'\u00eatre un p\u00e9rave", + "youtube_key": "2-U7BSsqAVM" + }, + { + "quote": "Eh, la choucroute ! Si tu veux une saucisse...", + "youtube_key": "IYQWBrDjCnQ" + }, + { + "quote": "C'est trop bien de se d\u00e9guiser", + "youtube_key": "8UvVX58XzlM" + }, + { + "quote": "George Abitbol. Classe, man ! Top of the pop !", + "youtube_key": "dw3EotXbZCA" + }, + { + "quote": "Mais tout \u00e7a nous \u00e9loigne de George", + "youtube_key": "tCM0BzoJhE8" + }, + { + "quote": "J'ai jamais pu encadrer Michel Legrand", + "youtube_key": "9LlAMjCAmjA" + }, + { + "quote": "J'aime pas comme tu conduis, je sais pas, j'ai pas confiance", + "youtube_key": "2zgSG7TSHnU" + }, + { + "quote": "Quand je serai c\u00e9l\u00e8bre, je me ferai des meufs ! Mmh je ferai des folies !", + "youtube_key": "CGBkpV7Sce8" + }, + { + "quote": "C'est du journalisme total", + "youtube_key": "f7ZT9K2yWXQ" + }, + { + "quote": "Un vrai petit cam\u00e9l\u00e9on le Dave", + "youtube_key": "F5dm3GE5-hw" + }, + { + "quote": "Je pense que tu peux faire beaucoup mieux qu'une simple chemise", + "youtube_key": "lv8EH2Tc68c" + }, + { + "quote": "Voil\u00e0 comment on le f\u00e9licite, le Dave", + "youtube_key": "kWtco7jA1R0" + }, + { + "quote": "Il a beau \u00eatre \u00e0 pied, il doit s\u00fbrement vivre des moments extraordinaires", + "youtube_key": "YHWOLQOqdho" + }, + { + "quote": "Je pense \u00e0 Albert Londres, Gunter Wallraff et autres Robert Namias", + "youtube_key": "m7Kg4SrMbFc" + }, + { + "quote": "Je sais que vous avez v\u00e9cu au Texas. Je voudrais recueillir votre t\u00e9moignage", + "youtube_key": "OAse3II6bs4" + }, + { + "quote": "\u00c0 vrai dire, j'ai quelques souvenirs tr\u00e8s confus", + "youtube_key": "uPlEd6TS1w8" + }, + { + "quote": "Puisque vous ne voulez pas m'aider, allez vous faire enculer", + "youtube_key": "a5A4R2wgtaQ" + }, + { + "quote": "Je continue \u00e0 croire en mon aventure. J'ai quand m\u00eame deux ou trois doutes", + "youtube_key": "bOVEBfeil1k" + }, + { + "quote": "Je vais la m\u00e9tamorphoser ma t\u00eate de Fran\u00e7ais, tu vas voir", + "youtube_key": "ALUdIqYnEqY" + }, + { + "quote": "J'ai perdu beaucoup de temps avec le blizzard. Je crois bien que j'ai pris froid", + "youtube_key": "2MBMNH_UhlE" + }, + { + "quote": "Ah, voil\u00e0 enfin quelqu'un qui va peut-\u00eatre me dire quelque chose !", + "youtube_key": "BVK_LedunTU" + }, + { + "quote": "OK, tu veux pas me parler, mmh ? Tu veux que je fasse parler la poudre ?", + "youtube_key": "4HfVKd8-Gp4" + }, + { + "quote": "Meuh !!!", + "youtube_key": "sR3NzrnYHPo" + }, + { + "quote": "\u00c7a sent le pipeau ton histoire. Le pipeau !", + "youtube_key": "7mqvHWQADaw" + }, + { + "quote": "J'ai un nouvel ami mais il est un peu con. Tu me diras, il a cinq ans", + "youtube_key": "-xfzQGYrV1k" + }, + { + "quote": "Vous \u00eates en train de me dire qu'il a menti ? Vous le traitez de menteur ?", + "youtube_key": "bcmDp5ygxec" + }, + { + "quote": "Il \u00e9tait trop balourd, trop pataud, il voulait pas me l\u00e2cher la touffe", + "youtube_key": "FpCFkfXRujo" + }, + { + "quote": "Madame, je voulais vous dire, je vous aime", + "youtube_key": "kcQQYGjCej4" + }, + { + "quote": "J'aime vos seins, vos loches", + "youtube_key": "lbGVqUtpGLo" + }, + { + "quote": "Dites donc, vos verres, ils sont crados", + "youtube_key": "Fy9f4liJXYs" + }, + { + "quote": "Burp ! Excusez-moi Madame", + "youtube_key": "PvTiaCEA7A0" + }, + { + "quote": "Moi je pense qu'il avait pas plus de classe que de beurre au cul", + "youtube_key": "eES7Sj5skLw" + }, + { + "quote": "Herv\u00e9 Claude, Jean-Claude Narcy, faites place, t\u00e9nors du journalisme ! J'arrive !", + "youtube_key": "zOgmI8twFk0" + }, + { + "quote": "C'est ma profession, moi, de t\u00e9moigner. Mes t\u00e9moignages c'est pas de la daube", + "youtube_key": "BnRL8-xFeXI" + }, + { + "quote": "Vous m'avez dit que vous aviez bien connu George", + "youtube_key": "6XbajyhH0cM" + }, + { + "quote": "La v\u00e9rit\u00e9, \u00e7a n'a jamais int\u00e9ress\u00e9 personne", + "youtube_key": "9KXiFCiKqpA" + }, + { + "quote": "Faut savoir la rendre excitante, la v\u00e9rit\u00e9", + "youtube_key": "xSovqkYpI7M" + }, + { + "quote": "Moi \u00e0 la p\u00eache, lui le cheval. Ah ouais, c'est bon comme \u00e7a !", + "youtube_key": "M-LIEVF1Di4" + }, + { + "quote": "....................", + "youtube_key": "cYFrrgbiLcc" + }, + { + "quote": "Le journalisme total, c'est totalement con", + "youtube_key": "mnVuLmSgM_o" + }, + { + "quote": "On veut laisser tomber nos d\u00e9guisements. On en a marre", + "youtube_key": "k7XCnGeeCLU" + }, + { + "quote": "Comme vous le sentez", + "youtube_key": "bzdrsUvK51c" + }, + { + "quote": "Mais c'est le sympathique Dave que voil\u00e0 ! Il a remis son ancienne chemise ?", + "youtube_key": "RxkwvHT9MNI" + }, + { + "quote": "Est-ce que vous voulez \u00eatre ma femme, et apr\u00e8s on boira un caf\u00e9 ?", + "youtube_key": "0E0wQE0NSMs" + }, + { + "quote": "Monsieur, vous savez parler avec l'accent canadien ?", + "youtube_key": "g42rbfqwH3s" + }, + { + "quote": "Vous savez parler comme \u00e7a, en plissant le visage ?", + "youtube_key": "1EHdA4acb2c" + }, + { + "quote": "Salut, \u00e7a va ?", + "youtube_key": "kzpvvL0pUJk" + }, + { + "quote": "Un super h\u00e9licopt\u00e8re qu'on a intelligemment appel\u00e9 Supercopter.", + "youtube_key": "Un9HJeMq5Uc" + }, + { + "quote": "Oh les cons !", + "youtube_key": "tm0Q9RnwA1M" + }, + { + "quote": "Regarde, c'est lui, l\u00e0. Qui, le jus de tomate ?", + "youtube_key": "dafDkBPC5Es" + }, + { + "quote": "Dites-moi, vous pourriez nous parler de George Abitbol ?", + "youtube_key": "Sz6zHdgy8yE" + }, + { + "quote": "Trouvez un moyen de raconter votre histoire, m\u00eame sans ouvrir la bouche", + "youtube_key": "EXkug9bQuOA" + }, + { + "quote": "J'\u00e9tais \u00e0 la cueillette aux champignons...", + "youtube_key": "-j_vzYQv9qA" + }, + { + "quote": "Tu es Julien Lepers, c'est \u00e7a ?", + "youtube_key": "zrd7tUYDlFY" + }, + { + "quote": "Nous \u00e9tions s\u00e9par\u00e9s, mais quelle importance, nous sommes r\u00e9unis", + "youtube_key": "Mzp5QWvX_wc" + }, + { + "quote": "Cet homme, il est tr\u00e8s connu. Par contre avant \u00e7a, c'\u00e9tait un parfait inconnu", + "youtube_key": "qHbjjcs2uHQ" + }, + { + "quote": "Hop hop hop ! Et notre r\u00e9p\u00e9tition de scie musicale ?", + "youtube_key": "ws4DFnZzlJs" + }, + { + "quote": "Putain, il est costaud cet acteur !", + "youtube_key": "Qj_TR5lw_Vs" + }, + { + "quote": "C'est vrai que t'es vosgien, toi", + "youtube_key": "gz-OR76vvIk" + }, + { + "quote": "Moi je l'ai jamais rencontr\u00e9, George", + "youtube_key": "z0Xy0dsxKBU" + }, + { + "quote": "Moi, je suis un type qui a fait beaucoup pour l'\u00e9cologie", + "youtube_key": "U_H-iOeiyRM" + }, + { + "quote": "........................................", + "youtube_key": "0hMPLaQDYnw" + }, + { + "quote": "J'ai entendu parler d'un type, un d\u00e9nomm\u00e9 Jo\u00ebl, il avait un ami manchot", + "youtube_key": "-Pc92yEks5k" + }, + { + "quote": "J'ai peut-\u00eatre qu'un bras, mais... je suis pas manchot !", + "youtube_key": "ZlAJOVfIFO0" + }, + { + "quote": "C'est le cowboy de Tchernobyl", + "youtube_key": "Lpem2p7nllM" + }, + { + "quote": "C'est \u00e7a, la puissance intellectuelle. Bac + 2, les enfants !", + "youtube_key": "PLEucVaAEvo" + }, + { + "quote": "On va s'inventer une petite charade, et l\u00e0, il sera bien feint\u00e9", + "youtube_key": "u7pZf9E8EDA" + }, + { + "quote": "Tous les moyens sont bons pour arr\u00eater le meurtrier", + "youtube_key": "LExotFSLryw" + }, + { + "quote": "Il y a de la boue qu'il vaut mieux pas la remuer !", + "youtube_key": "ieNzuKlQ1Kc" + }, + { + "quote": "Je demandais si on n'avait pas re\u00e7u mes tricots de peau en polystyr\u00e8ne expans\u00e9", + "youtube_key": "x4OfX5-w7zE" + }, + { + "quote": "Vous commencez \u00e0 faire chier, Professeur, vous savez \u00e7a ?", + "youtube_key": "SsP3w6GXLLs" + }, + { + "quote": "Je crois que mon tailleur se fout de ma gueule", + "youtube_key": "yjNP7UO2Xbo" + }, + { + "quote": "Bon, je vais essayer de m'en rappeler, hein", + "youtube_key": "bFnkINu27rY" + }, + { + "quote": "Ah ah, vous, vous \u00eates un sacr\u00e9 sans-g\u00eane !", + "youtube_key": "x8OVfrWFfIg" + }, + { + "quote": "Je vais vous raconter une histoire pas banale", + "youtube_key": "uLuYuw6h6mE" + }, + { + "quote": "On a rep\u00e9r\u00e9 des animaux pr\u00e9historiques partouzeurs de droite dans les parages", + "youtube_key": "TjMIcZgS4_I" + }, + { + "quote": "Regarde ! Jo\u00ebl, n'y va pas, reste ici !", + "youtube_key": "p6yc3jsGbIg" + }, + { + "quote": "........................................", + "youtube_key": "GtCK8ubqdeU" + }, + { + "quote": "Ouais !", + "youtube_key": "Z4TxGPGDtNM" + }, + { + "quote": "Je d\u00e9teste les animaux pr\u00e9historiques partouzeurs de droite, bordel !", + "youtube_key": "4rWnGV-uaCU" + }, + { + "quote": "Il a fait comme \u00e0 chaque fois qu'il y avait du grabuge !", + "youtube_key": "XKdFJr_ZWEU" + }, + { + "quote": "Il allait s'isoler dans la montagne. Personne n'a jamais su ce qu'il faisait", + "youtube_key": "RSpNgHwSJnY" + }, + { + "quote": "\u00c7a daube, \u00e7a daube !", + "youtube_key": "M7jXBS0JET4" + }, + { + "quote": "Vous voulez voir mes fesses ? Et ensuite, je vous roulerai une pelle ?", + "youtube_key": "_2M40I75dkw" + }, + { + "quote": "Je faisais l'amour avec lui depuis le samedi apr\u00e8s-midi jusqu'au vendredi soir", + "youtube_key": "q3TNFIlsJqg" + }, + { + "quote": "Oh, t'es lourde. J'ai tr\u00e8s bien entendu. Bon, excuse-moi", + "youtube_key": "R45EVeNKjww" + }, + { + "quote": "C'est lui, George ? Eh bien bravo !", + "youtube_key": "H5a93n4lQPI" + }, + { + "quote": "Parfois il arrive que les apparences soient trompeuses", + "youtube_key": "yplaZV78U7c" + }, + { + "quote": "Il mourra pas de sa belle mort, crois-moi", + "youtube_key": "xDJjRspa45o" + }, + { + "quote": "Tu pr\u00e9f\u00e8res pas qu'on fasse la paix, plut\u00f4t ?", + "youtube_key": "xfHJm_M1BsM" + }, + { + "quote": "\u00c0 propos de salope, j'aimerais bien passer \u00e0 l'acte sexuel", + "youtube_key": "JpTEfvynl-Q" + }, + { + "quote": "Moi je suis \u00e0 bloc. Dites-moi si c'est oui ou si c'est non", + "youtube_key": "533mrkKeo8A" + }, + { + "quote": "........................................", + "youtube_key": "yUEWFvJGxVY" + }, + { + "quote": "Il voulait que je parle, mais j'ai rien dit du tout !", + "youtube_key": "eUyK7wUB9A4" + }, + { + "quote": "Si tu l'avais dit on passait pour des busards", + "youtube_key": "-mLIdijjSyw" + }, + { + "quote": "Pourquoi, pourquoi, pourquoi ?", + "youtube_key": "YjF5pDftP58" + }, + { + "quote": "Sexe plus histoire de cul \u00e9galent meurtre", + "youtube_key": "tLsYXQePdeE" + }, + { + "quote": "On va devenir c\u00e9l\u00e8bres ! On va bient\u00f4t niquer, on va bient\u00f4t niquer !", + "youtube_key": "o0a-p5F01M0" + }, + { + "quote": "Gorge Profonde, vous avez demand\u00e9 \u00e0 me voir ? Vous avez des r\u00e9v\u00e9lations ?", + "youtube_key": "EyzadXpApO8" + }, + { + "quote": "George Abitbol est pas crev\u00e9. Il est m\u00eame vivant", + "youtube_key": "0SWkkhfjGAg" + }, + { + "quote": "George il est bien vivant, merde. Et il est revenu pour se venger", + "youtube_key": "iFz38YoBKBc" + }, + { + "quote": "Il y a des voitures dans les parkings maintenant ?", + "youtube_key": "sJm0kyxtQI0" + }, + { + "quote": "........................................", + "youtube_key": "kPIWnrdn-0I" + }, + { + "quote": "........................................", + "youtube_key": "D7UP5IUhNH0" + }, + { + "quote": "Le prends pas mal, mais... tiens !", + "youtube_key": "lImiMWYLWbw" + }, + { + "quote": "Alors, on peut plus chier tranquille ?", + "youtube_key": "ITlkUVMMl1E" + }, + { + "quote": "Babloche !", + "youtube_key": "uc9vW9VoCBc" + }, + { + "quote": "D\u00e9sol\u00e9 papy, mais j'ai ma libert\u00e9 d'expression capillaire", + "youtube_key": "ZIrVu0eqArc" + }, + { + "quote": "George ! Mais tu es vivant !", + "youtube_key": "ozteEglpImo" + }, + { + "quote": "Je veux l'adresse de l'homme qui a voulu me tuer", + "youtube_key": "EZlaEiVKAII" + }, + { + "quote": "Mais comportez-vous en bon am\u00e9ricain, George. Faites honneur \u00e0 votre drapeau", + "youtube_key": "waNXNvxZtNw" + }, + { + "quote": "Je suis l'homme le plus classe du monde, bande de cons !", + "youtube_key": "suDhzAcG35o" + }, + { + "quote": "........................................", + "youtube_key": "o9OPx49yJzE" + }, + { + "quote": "Alors George, qu'est-ce que tu veux comme tuyau ?", + "youtube_key": "R06p-agsVEk" + }, + { + "quote": "Je donne \u00e0 tout le monde des bons tuyaux, je m\u00e9rite pas un peu d'amour", + "youtube_key": "-NqXs-5hWzY" + }, + { + "quote": "Et toi, ton tuyau t'as qu'\u00e0 te le mettre dans le cul !", + "youtube_key": "vAjqkLcFp-I" + }, + { + "quote": "D'accord, mais seulement pour du fric", + "youtube_key": "AfW0O8yETvw" + }, + { + "quote": "Vous savez que George sort de mon bureau ?", + "youtube_key": "l6XbJ1XcvHI" + }, + { + "quote": "Bien jou\u00e9, les gars", + "youtube_key": "ug26glYw5Ss" + }, + { + "quote": "C'est du pass\u00e9. Tournons-nous plut\u00f4t vers l'avenir", + "youtube_key": "LtAy1aFQcic" + }, + { + "quote": "Pardon mon doux seigneur", + "youtube_key": "NosG4tEtcyM" + }, + { + "quote": "\u00c9teins ta clope", + "youtube_key": "UkI6r__CzzU" + }, + { + "quote": "Cocorico !", + "youtube_key": "MVh-KjrMDKM" + }, + { + "quote": "Merci pour la clope, grosse vache", + "youtube_key": "bXII5qgXedE" + }, + { + "quote": "Vous voulez niquer avec mon ami et moi ?", + "youtube_key": "rvpidnbBV1A" + }, + { + "quote": "Laisse tomber ce connard, victoire, vieux, victoire !", + "youtube_key": "69zaOtxZrN4" + }, + { + "quote": "Vous pouvez pas savoir ce que \u00e7a repr\u00e9sente pour nous. Je flashe !", + "youtube_key": "m_syCobz6Go" + }, + { + "quote": "Si on vous avait rencontr\u00e9e avant, on aurait pu niquer sans m\u00eame \u00eatre c\u00e9l\u00e8bres", + "youtube_key": "hbYoL_lIbHY" + }, + { + "quote": "Patron, patron ! Il faut qu'on vous parle, vite !", + "youtube_key": "81LsSBURPvk" + }, + { + "quote": "Attendez les gars, on sait pas encore ce que veut dire \"monde de merde\"", + "youtube_key": "-uIM3svXDw0" + }, + { + "quote": "OK les gars", + "youtube_key": "N0DbFcKfov8" + }, + { + "quote": "Je suis majeur et je fais ce que j'ai envie de faire avec mon petit corps.", + "youtube_key": "xH8YTkvdlvg" + }, + { + "quote": "Tu te r\u00e9veilles \u00e0 35 ans pour te demander ce que \u00e7a veut dire \"monde de merde\" ?", + "youtube_key": "PfPs7yPtaBo" + }, + { + "quote": "Partout l'injustice, le nationalisme, l'exclusion, \u00e7a me d\u00e9becte !", + "youtube_key": "DKsC0cn3Pd8" + }, + { + "quote": "Tu t'int\u00e9resses pas \u00e0 la politique. Ben tu devrais", + "youtube_key": "le5CSHCr_uw" + }, + { + "quote": "Faut se mettre au travail, afin de vaincre les fanascismes", + "youtube_key": "dLvGDPL33mI" + }, + { + "quote": "Moi aussi j'ai bien envie de le dire. Monde de merde", + "youtube_key": "9rZ5Ibff96s" + } +] \ No newline at end of file