Giter Site home page Giter Site logo

pretrehr / sports-betting Goto Github PK

View Code? Open in Web Editor NEW
385.0 24.0 86.0 147.31 MB

Sports betting assistant (with interface) which optimizes earnings regarding odds and offers

License: MIT License

Python 100.00%
sports-betting arbitrage betting-odds gambling-strategy winamax bwin betclic unibet pokerstars fdj

sports-betting's Introduction

forthebadge made-with-python

Build windows Build ubuntu Build mac os Requirements Status GitHub license

Sports-betting

Sports betting assistant which optimizes earnings regarding odds and offers

(English version below)

Assistant de paris sportifs avec optimisation des gains en fonction des cotes et des promotions

Sommaire

Prérequis

  • Python 3.6 ou ultérieur
  • Google Chrome

Installation

  • Téléchargez ou clonez le dépôt
  • Allez à la racine du projet
  • Exécutez la commande
pip install -r requirements.txt

Si vous choisissez d'utiliser l'interface utilisateur, il suffit alors de lancer la commande

python interface_pysimplegui.py

Vous obtenez alors cette fenêtre : image

Sinon, vous pouvez aussi utiliser le package en ligne de commande

  • Lancez python3
>>> import sportsbetting
>>> from sportsbetting.user_functions import *
  • Vous pouvrez alors utiliser toutes les fonctions disponibles dans le fichier user_functions.py.

Initialisation

Avant de pouvoir pleinement utiliser toutes les fonctions du fichier user_functions.py, il est nécessaire d'initialiser la base de matches sur lesquels on peut potentiellement parier. Par exemple, si l'on veut uniquement se concentrer sur les matches de Ligue 1 Française, et que l'on veut seulement parier sur Betclic et Winamax, on écrira :

>>> parse_competition("ligue 1 france", "football", "betclic", "winamax")

On notera que si vous ne précisez pas de bookmaker, l'algorithme récupèrera les cotes des matches de la compétition sur la plupart des bookmakers agréés par l'ARJEL. Si vous n'avez pas de compétition ou de sport cible, il est conseillé d'appeler

>>> parse_football()

ou, par exemple,

>>> parse_football("betclic", "winamax")

Ces fonctions vont récupérer les cotes des matches disponibles chez les différents bookmakers pour les 5 grands championnats européens de football (Ligue 1, Premier League, LaLiga, Serie A, Bundesliga), car ce sont ces compétitions qui, généralement, générent le plus de rendement. On précisera que dans le cas du tennis où il n'y a pas de compétition fixe, il faut appeler la fonction:

>>> parse_tennis()

ou, par exemple,

>>> parse_tennis("betclic", "winamax")

Cette commande aura pour effet de récupérer les cotes de matches de tennis des compétitions actuellement disputées.

Vous trouverez ci-dessous un tableau récapitulatif des différents bookmakers agréés par l'ARJEL avec la chaîne de caractères associée dans le package.

Bookmaker Chaîne de caractères
Betclic "betclic"
Bwin "bwin"
France Pari "france_pari"
JOA "joa"
NetBet "netbet"
Parions Sport "parionssport"
PasinoBet "pasinobet"
PMU "pmu"
PokerStars "pokerstars"
Unibet "unibet"
Winamax "winamax"
Zebet "zebet"

Nota bene: Il n'est pour l'instant pas possible d'utiliser le package pour les bookmakers suivant :

  • Feelingbet qui propose très peu de promotions. Mais au besoin, les cotes disponibles sur ce site sont identiques à celles disponibles sur France Pari
  • Genybet qui est davantage axé sur les paris hippiques plutôt que sportifs
  • Vbet qui propose des promotions nombreuses mais très restrictives et donc peu rentables

La récupération des cotes peut être facilement utilisée depuis l'interface sur l'onglet "Récupération des cotes". Il suffit alors de choisir le sport, le (ou les) championnat(s) et le (ou les) bookmaker(s) souhaités. Une barre de chargement apparaît alors, la récupération des cotes est terminée lorsque la barre disparaît.

image

À titre informatif, toutes les cotes récupérées sont consultables depuis l'onglet "Cotes" de l'interface. Dans cet onglet vous pouvez ainsi facilement comparer les cotes d'un même match entre les différents bookmakers. Vous avez également la possibilité de supprimer un match que vous ne souhaitez pas prendre en compte dans les calculs futurs.

image

Exemples d'utilisation

Les bonus reçus sont quasi systématiquement des freebets (ou paris gratuits). Un tel bonus signifie que lorsque l'on mise, par exemple, sur une cote à 3 avec un freebet de 10€, si le pari s'avère gagnant, alors on récupère 3×10-10 = 20€ (contre 30€ pour un pari standard), cela équivaut donc à miser avec un pari normal sur une cote réduite de 1. On verra plus tard qu'il est possible de récupérer de manière certaine, 80% de la valeur d'un freebet. Ainsi, un freebet de 10€ équivaut à 10 × 0.8 = 8€.

Les exemples ci-dessous sont des exemples de promotions qui reviennent régulièrement chez les différents bookmakers. Vous y trouverez une description de comment exploiter au mieux ces promotions. Bien-sûr, cette liste n'est pas exhaustive et il vous appartient d'adapter ces exemples aux conditions des promotions que vous rencontrerez à l'avenir. Pour chacun des exemples, vous trouverez une explication de comment rentabiliser une promotion similaire en ligne de commande ou à l'aide de l'interface.

Exemple 1 : Bonus reçu dans tous les cas si l'on mise sur un match donné

France-pari propose très souvent une promotion qui consiste à miser un pari de 20€ sur un match précis de Ligue 1 à une cote minimale de 2 pour recevoir un freebet de 5€. Par exemple, pour la 20e journée de Ligue 1 2019/2020, le match proposé était Toulouse - Brest. Il suffit alors d'exécuter:

>>> parse_competition("ligue 1", "football") #Si non exécuté précédemment
>>> best_stakes_match("Toulouse - Brest", "france_pari", 20, 2, "football")

Si la plus-value minimum est supérieure à 5 × 0.8 = 4€, alors cette promotion est rentable et on peut répartir nos mises telles qu'elles sont décrites.

Pour effectuer ce calcul depuis l'interface, il suffit de vous rendre sur l'onglet "Pari sur un match donné" et de sélectionner les paramètres souhaités. image

Exemple 2 : Bonus reçu dans tous les cas si l'on mise sur un match quelconque, éventuellement d'une compétition donnée / d'un sport donné

S'il n'y a aucune condition sur le match à jouer, on peut éxécuter

>>> parse_football()

car, comme dit plus haut, ce sont ces matches qui vont générer le plus de rendement.

Si on doit miser sur un match de NBA, on peut exécuter

>>> parse_competition("nba", "basketball")

Si on doit miser sur un match de tennis, on peut exécuter

>>> parse_tennis()

On notera par ailleurs qu'il n'est en général pas possible de récupérer les cotes de tous les matches d'un sport donné, car cela peu être très couteux en temps d'exécution. Il faut donc choisir la ou les compétition(s) la (les) plus populaire(s) pour le sport choisi, car ce sont ces matches qui génèreront le plus de rendement. Le tableau ci-dessous indique quelle fonction appeler pour chaque sport.

Sport Fonction à appeler
Football parse_football()
Basketball parse_nba() (raccourci de parse_competition("nba", "basketball"))
Tennis parse_tennis()
Rugby parse_competitions(["top 14", "champions cup", "six nations"], "rugby")
Hockey sur glace parse_nhl() (raccourci de parse_competition("nhl", "hockey-sur-glace"))

Une fois votre ensemble de matches choisi, on peut alors utiliser la fonction best_match_under_conditions

Par exemple, France-pari propose régulièrement une promotion qui consiste à rembourser, en freebet, 10% des mises engagées sur des cotes supérieures à 1,70 et dans une limite de 100€ remboursés. L'objectif est alors de miser 1000€ afin de récupérer le bonus maximal. Ainsi, si l'on suppose que la promotion se déroule entre le 3 janvier 2020 à minuit et le 12 janvier 2020 à 23h59, on peut exécuter :

>>> best_match_under_conditions("france_pari", 1.7, 1000, "football", "3/1/2020", "0h00", "12/1/2020", "23h59")

Si la perte affichée est inférieure à 100 × 0.8 = 80€, alors cette promotion est rentable et on peut répartir nos mises telles qu'elles sont décrites.

Depuis l'interface, cela revient à se rendre sur l'onglet "Pari simple" et rentrer les paramètres adéquats. image

Exemple 3 : Bonus reçu si au moins n matches gagnés

Nota bene: À partir de cet exemple, on supposera que l'on a préalablement appelé une fonction d'initialisation des matches voulus (du type parse_...), en fonction des besoins de la promotion.

Parfois, il est nécessaire de gagner un certain nombre de paris pour recevoir un bonus. Dans ces cas-là, il faut miser sur le même bookmaker sur chacune des issues d'un même match. Betclic propose par exemple parfois de recevoir 10€ de freebet pour 3 paris gagnés, de 5€ chacun, misés sur des cotes d'au moins 1.7 et placés sur 3 matches différents. On peut alors exécuter

>>> best_match_pari_gagnant("betclic", 1.7, 5, "tennis")

Cette fonction donnera le meilleur match sur lequel parier à un instant donné. Si la perte affichée est inférieure à (10 × 0.8)/3, alors on peut supposer que cette promotion est rentable et on peut répartir nos mises telles qu'elles sont décrites. Cela constituera le premier pari gagnant. Un peu plus tard (par exemple lorsque le match en question a été joué), on peut réitérer ce procédé afin de savoir sur quel match doit on jouer pour gagner le 2ème pari de la série et ainsi de suite jusqu'à atteindre 3 paris gagnants. À noter, que dans ce cas précis, il est nécessaire de ré-exécuter la fonction parse_tennis une fois qu'on a gagné un pari, car dans le cas contraire, le résultat renvoyé par la fonction best_match_pari_gagnant serait identique au résultat de l'exécution précédente.

Depuis l'interface, il vous suffit de vous rendre sur l'onglet "Pari gagnant" et de rentrer les paramètres voulus. image

Une fois le pari placé, vous avez la possibilité de supprimer le match obtenu de la base de données depuis l'onglet "Cotes". De cette manière, vous obtienez un résultat différent lorsque vous réexécutez le calcul depuis l'onglet "Pari gagnant". image

Exemple 4 : Bonus reçu si un pari est perdant.

Il s'agit d'un type de promotion très courant, notamment en ce qui concerne les offres de bienvenue, mais pas seulement. Par exemple, à l'été 2018, Winamax proposait à ses utilisateurs de rembourser en cash (donc pas en freebet) 100% leur premier pari de 200€ maximum si celui-ci est perdant. On notera par ailleurs que sur Winamax (comme sur la plupart des autres bookmakers), on ne peut parier que sur des cotes supérieures (ou égales) à 1.10. On peut alors exécuter

>>> best_match_cashback("winamax", 1.1, 200, "football", freebet=False)

Ce calcul est également accessible depuis l'interface, dans l'onglet "Cashback". image

Conversion des freebets en cash

Méthode 1 : Si l'on n'a que des freebets fractionnables

Chez les bookmakers suivant : Betclic, Unibet, ParionsSport et Zebet, il est possible de fractionner les freebets gagnés en plusieurs paris. Par exemple, si l'on a gagné 10€ de freebets, il est possible de miser 8€ puis 2€. Pour optimiser le gain, l'idée va alors être de couvrir toutes les issues avec des freebets sur un combiné de 2 matches de football (ce qui représente donc 9 issues à couvrir). Par exemple, si on dispose de 10€ de freebet, on va alors exécuter

>>> best_matches_freebet_one_site("betclic", 10)

Méthode 2 : Si l'on a quelques freebets non fractionnables et suffisamment de freebets fractionnables

Chez tous les bookmakers sauf Betclic, Unibet, ParionsSport et Zebet, il n'est pas possible de séparer un freebet en plusieurs paris. Supposons que l'on dispose de 100€ de freebets fractionnables sur Betclic, 1 freebet de 10€ sur Winamax et 2 freebets de 5€ sur France-pari. L'idée serait alors de répartir nos 100€ de freebets fractionnables sur un combiné de 2 matches comme dans la méthode 1, puis de remplacer (totalement ou en partie) certaines mises par des freebets non fractionnables des autres bookmakers. De cette manière on répartit les freebets non fractionnables sur plusieurs issues d'un combiné et on comble les différences avec des freebets fractionnables. On aura donc vraisemblablement des issues couvertes uniquement par un freebet non fractionnable, d'autres couvertes en partie par un freebet non fractionnable et un freebet fractionnable, et d'autres couvertes uniquement en freebet fractionnable. Dans cet exemple, on exécute alors

>>> best_matches_freebet(["betclic"], [[10, "winamax"], [5, "france_pari"], [5, "france_pari"]])

Depuis l'interface, l'onglet "Freebets à placer" effectue le même calcul, on obtient alors: image

Cette deuxième méthode doit, lorsqu'elle est possible, être celle à privilégier lorsque l'on dispose de freebets non fractionnables car c'est elle qui offre le meilleur rendement. La première méthode est elle aussi très rentable mais il est préférable de conserver les freebets fractionnables pour justement appliquer la 2e méthode lorsque l'on disposera de freebets non fractionnables.

Méthode 3 : Si l'on dispose de freebets non fractionnables et pas assez de freebets fractionnables

Par ailleurs, chez tous les bookmakers sauf Betclic, Unibet et Zebet, les freebets ont une date limite d'utilisation, allant de 2-3 jours pour Bwin, à 1 mois pour France-pari. Il peut donc être nécessaire de les jouer rapidement et il se peut également que l'on n'ait pas assez de freebets fractionnables pour pouvoir appliquer la 2e méthode. Dans cette situation, il est plus efficace de parier sur un unique match plutôt que sur un combiné. Il est également nécessaire de couvrir un pari en freebet avec de l'argent réel. De plus, avec cette méthode, on ne peut jouer qu'un freebet à la fois. Ainsi si l'on dispose d'un freebet de 15€ chez Betstars, on exécute alors

>>> best_match_freebet("betstars", 15, "football")

Nota bene : Ne pas confondre best_match_freebet et best_matches_freebet.

On notera par ailleurs que certains sites comme NetBet ou PMU proposent parfois des freebets qui ne sont jouables que sur un unique sport. Auquel cas, il faut adapter le sport à la situation.

On peut appliquer cette méthode depuis l'interface dans l'onglet "Freebet unique". image

Cette méthode est en moyenne beaucoup moins rentable et beaucoup plus volatile que les deux précédentes. Les deux premières méthodes assurent un taux de revient situé entre 77 et 85% de la somme de freebets engagés. Avec la 3ème méthode, il faut s'attendre à un taux de revient situé entre 55 et 70%.

Avertissement

Ce projet a pour but d'aider l'utilisateur à dégager de l'argent en se rapprochant au maximum de l'absence de risque. Néanmoins, il est important de préciser que le risque zéro n'existe pas et que les cotes publiées par les bookmakers sont destinées à évoluer au cours du temps. Il est donc de votre ressort de vous assurer que les informations affichées par l'application Sports-betting sont fiables. En tant que créateur, je ne pourrai, en aucun cas, être tenu responsable de toute perte de capital survenue lors de l'utilisation de ce projet.

English version

Table of contents

Installation

  • Download the repository
  • Go to the root of the repository
pip install -r requirements.txt
  • Launch python3
>>> import sportsbetting
>>> from sportsbetting.user_functions import *

Initialization

Before you can fully use all the functions in the user_functions.py file, it is necessary to initialize the database of matches you can potentially bet on. For example, if you only want to focus on French Ligue 1 matches, and you only want to bet on Betclic and Winamax, you would write :

>>> parse_competition("ligue 1 france", "football", "betclic", "winamax")

Note that if you do not specify a bookmaker, the algorithm will retrieve the odds of the matches of the competition from most of the bookmakers approved by the ARJEL (French Regulatory authority for online games). If you do not have a specific competition or target sport, it is advisable to call

>>> parse_football()

or, for example,

>>> parse_football("betclic", "winamax")

These functions will retrieve the odds of the matches available at the various bookmakers for the 5 major European football championships (Ligue 1, Premier League, LaLiga, Serie A, Bundesliga), as these competitions generally generate the highest returns. It should be pointed out that in the case of tennis where there is no fixed competition, it is necessary to call the function:

>>> parse_tennis()

or, for example,

>>> parse_tennis("betclic", "winamax")

This command will retrieve the odds of tennis matches from the competitions currently being played.

You will find below a summary table of the different French bookmakers with the associated string in the package.

Bookmaker String
Betclic ``"betclic""
BetStars ``betstars"`
Bwin "bwin"
France Pari "france_pari"
JOA "joa"`
NetBet "netbet"
Pariels Sport
PasinoBet
PMU "pmu"`
Unibet
Winamax
Zebet

Note bene: It is currently not possible to use the package for the following bookmakers:

  • Feelingbet which offers very few promotions. But if necessary, the odds available on this site are identical to those available on France Pari.
  • Genybet which focuses more on horse betting rather than sports betting.
  • Vbet](https://www.vbet.fr/paris-sportifs) which offers numerous but very restrictive and therefore unprofitable promotions.

Examples of use

The bonuses received are almost always freebets (or paris gratuits). Such a bonus means that when you bet, for example, on an odds equals to 3 with a €10 freebet, if the bet turns out to be winning, then you get 3×10-10 = €20 (compared to €30 for a standard bet), so it is equivalent to betting with a normal bet on an odds reduced by 1. We will see later that it is possible to win back 80% of the value of a freebet with certainty. Thus, a €10 freebet is equivalent to 10 × 0.8 = €8.

The examples below are examples of promotions that regularly appear at the different bookmakers. You will find a description of how to get the most out of these promotions. This list is naturally not exhaustive and it is up to you to adapt these examples to the conditions of the promotions you will encounter in the future.

Example 1: Bonus received in all cases if you bet on a given match

France-pari very often offers a promotion which consists in betting a €20 bet on a specific Ligue 1 match at a minimum odds of 2 to receive a €5 freebet. For example, for the 20th round of Ligue 1 2019/2020, the proposed match was Dijon - Metz. You just have to execute:

>>> parse_competition("ligue 1", "football") #If not previously executed
>>> best_stakes_match("Dijon - Metz", "france_pari", 20, 2, "football")

If the minimum raise is more than 5 × 0.8 = €4, then this promotion is profitable and we can split our bets as specified.

Example 2: Bonus received in all cases if you bet on any match, possibly from a given competition / sport

If there are no conditions on the game to be played, we can execute

>>> parse_football()

because, as mentioned above, it is these matches that will generate the most returns.

If we're betting on an NBA game, we can execute...

>>> parse_competition("nba", "basketball")

If we're going to bet on a tennis match, we can execute

>>> parse_tennis()

It should also be noted that it is generally not possible to retrieve the odds of all the matches of a given sport, as this can be very costly in terms of execution time. It is therefore necessary to choose the most popular competition(s) for the chosen sport, as it is these matches that will generate the most returns. The table below indicates which function to call for each sport.

Sport Function to call
Football parse_football()
Basketball parse_nba() (short for parse_competition("nba", "basketball"))
Tennis parse_tennis()
Rugby parse_competitions(["top 14", "champions cup", "six nations"], "rugby")
Ice Hockey parse_nhl() (short for parse_competition("nhl", "hockey-sur-glace"))

Once you have chosen your set of matches, you can then use the best_match_under_conditions function.

For example, France-pari regularly offers a promotion which consists in reimbursing, in freebet, 10% of the stakes engaged on odds higher than 1.70 and within a limit of €100 reimbursed. The objective is then to bet €1000 in order to recover the maximum bonus. Thus, if we assume that the promotion takes place between January 3, 2020 at midnight and January 12, 2020 at 11:59 pm, we can execute :

>>> best_match_under_conditions("france_pari", 1.7, 1000, "football", "3/1/2020", "0h00", "12/1/2020", "23h59")

If the displayed loss is less than 100 × 0.8 = €80, then this promotion is profitable and we can distribute our stakes as described.

Example 3: Bonus received if at least n matches are won

Please note: From this example, we'll assume that we previously called a function to initialize the desired matches (of the type parse_...), according to the needs of the promotion.

Sometimes it is necessary to win a certain number of bets to receive a bonus. In these cases, it is necessary to bet on the same bookmaker on each of the outcomes of the same match. For example, Betclic sometimes offers to receive a €10 freebet for 3 bets won, of €5 each, bet on odds of at least 1.7 and placed on 3 different matches. You can then execute

>>> best_match_pari_gagnant("betclic", 1.7, 5, "tennis")

This feature will give you the best match to bet on at any given time. If the displayed loss is less than (10 × 0.8)/3, then we can assume that this promotion is profitable and we can distribute our stakes as described. This will be the first winning bet. A little later (e.g. when the match in question has been played), we can repeat this procedure to find out which match we need to play to win the 2nd bet in the series and so on until we reach 3 winning bets. Note that in this case, it is necessary to re-execute the parse_tennis function once you have won a bet, because otherwise the result returned by the best_match_pari_gagnant function would be identical to the result of the previous execution.

Example 4: Bonus received if a bet is lost.

This is a very common type of promotion, especially but not only for welcome offers. For example, in the summer of 2018, Winamax offered its users to pay back in cash (not freebet) 100% of their first bet of €200 maximum if they lost. It should also be noted that on Winamax (as on most other bookmakers), you can only bet on odds greater than (or equal to) 1.10. You can then run

>>> best_match_cashback("winamax", 1.1, 200, "football", freebet=False)

Converting freebets to cash

Method 1: If you only have fractionable freebets

At the following bookmakers: Betclic, Unibet, ParionsSport and Zebet, it is possible to split the won freebets into several bets. For example, if you have won €10 in freebets, you can bet €8 and then €2. To optimize the win, the idea will be to cover all the outcomes with freebets on a combination of 2 football matches (which represents 9 outcomes to cover). For example, if you have €10 of freebet, you will then run

>>> best_matches_freebet_one_site("betclic", 10)

Method 2: If you have a few non-fractionable freebets and enough fractionable freebets

At all bookmakers except Betclic, Unibet, ParionsSport and Zebet, it is not possible to split a freebet into several bets. Let's suppose that you have €100 fractionable freebets on Betclic, 1 freebet of €10 on Winamax and 2 freebets of €5 on France-pari. The idea would then be to spread our €100 of fractionable freebets over a combination of 2 games as in method 1, then replace (totally or partially) some stakes with non-fractionable freebets from other bookmakers. In this way we spread the non-fractionable freebets over several outcomes of a handset and compensate the differences with fractionable freebets. So you are likely to have some outcomes covered only by a non-fractionable freebet, others covered partly by a non-fractionable freebet and a fractionable freebet, and others covered only by a fractionable freebet. In this example, we then execute

>>> best_matches_freebet(["betclic"], [[10, "winamax"], [5, "france_pari"], [5, "france_pari"])

This second method should, where possible, be the preferred method when non-fractionable freebets are available, as it offers the best return. The first method is also very profitable but it is preferable to keep the fractionable freebets in order to apply the second method when you have non-fractionable freebets.

Method 3: If you have non-fractionable freebets and not enough fractionable freebets

At all bookmakers except Betclic, Unibet and Zebet, freebets have a time limit, ranging from 2-3 days for Bwin, to 1 month for France-pari. It may therefore be necessary to bet them quickly and there may not be enough fractionable freebets to be able to apply the 2nd method. In this situation, it is more efficient to bet on a single match rather than on a combination. It is also necessary to cover a freebet with real money. Furthermore, with this method, you can only play one freebet at a time. So if you have a €15 freebet at Betstars, then you can execute

>>> best_match_freebet("betstars", 15, "football")

Please note: Be careful not to confuse best_match_freebet with best_matches_freebet.

Note that some sites like NetBet or PMU sometimes offer freebets that are only playable on a single sport. In this case, you have to adapt the sport to the situation. This method is on average much less profitable and much more volatile than the first two. The first two methods ensure a return rate of between 77 and 85% of the sum of freebets placed. With the third method, a return rate between 55 and 70% is to be expected.

Disclaimer

This project aims to help the user to free up money by getting as close as possible to the absence of risk. Nevertheless, it is important to specify that zero risk does not exist and that the odds published by bookmakers are intended to evolve over time. It is therefore your responsibility to make sure that the information displayed by the Sports-betting application is reliable. As the creator, I cannot be held responsible for any loss of capital that may occur during the use of the application.

sports-betting's People

Contributors

pretrehr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sports-betting's Issues

Récupération des cotes annexes

Bonjour,

Franchement gros respect pour ton travail, c'est impressionnant !

Je suis développeur (plutot java), et j'aurais aimé t'aider, notamment pour récupérer d'autres types de côtes (genre les rebonds, les contres au basket etc), pour pouvoir detecter plus de surebets !

Penses-tu que cela soit possible ?

Cotes dépassées

Bonjour,

Tout d'abord, merci pour le travail effectué !

J'ai remarqué que certains sites (notamment pokerstars et unibet, peut être d'autres) renvoient parfois des données provenant d'un cache, ce qui donne des cotes qui ont changé depuis.

Cela arrive logiquement lorsque l'on fait plusieurs requêtes assez proches dans le temps.

Existerait-il un moyen de passer outre ces caches ? Ajouter les headers Cache-Control et Pragma ne semble pas suffire.

Cela est principalement dérangeant pour les surebets, qui restent souvent très peu longtemps.

error with demjson

Bonjour pretrehr,

J'expérimente une erreur à l'import de demjson qui empeche le lancement. Après quelques recherches il s'agirait de demjson qui ne se construit pas avec la version actuelle de setuptools.

Des idées de manière de contourner le problème ?

Merci pour le travail et merci d'avance pour l'aide.

Proposal !

I saw what you have developed here and probably from some small aspects you left this project, I am affiliated with 1xbet assian odds and many other houses and I am interested in developing something similar, please contact me at email [email protected] or on wp +373 796 43 746 surely I can help you monetize your application and develop it. Thanks in advance for your help and I hope to hear from you soon!

buteur

bonjour serait il possible d'ajouter les cotes des buteurs ? merci à vous

Mise minimum Pinnacle

Bonjour,

Je ne vois pas ou je pourrais rajouter une variable pour calculer les paris gagnants avec une mise minimum sur les bookmakers annexes.
Par exemple, un combiné qui doit être gagnant sur betclic pour obtenir un freebet remplis les 9 possibilités avec betclic et complète avec un bookmaker annexe (souvent pinnacle qui est hors arjel) pour diminuer au minimum la perte. Cependant les mises proposé sur ce bookmaker annexe ne remplissent pas les conditions du bookmaker (par exemple pinnacle à un minimu de 5 euro par mise) et propose donc des mises < 5e.
L'autre méthode est de multiplier toutes les mises pour obtenir la même value avec comme plus petite mise des 9 possibilités à Xe

import sportsbetting as sb

Bonjour,

Tout d'abord bravo pour le boulot, je rencontre une difficulté, sportsbetting n'est pas reconnu comme un module chez moi

image

Active fork

Puisque l'auteur du projet semble l'avoir abandonné, je reprends le projet dans un fork à cette adresse ouassimBenMosbah#1

Si vous avez des questions ou des besoins n'hésitez pas à basculer sur ce fork

Error while running pip install -r requirements.txt

Hello dev!
This is the error I get when I run pip install -r requirements.txt

Getting requirements to build wheel ... error
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [1 lines of output]
error in demjson setup command: use_2to3 is invalid.
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Parsing JOA ne fonctionne plus

Salut, je crois que le parsing de joa ne fonctionne plus (pas de message d'erreur, les équipes s'affichent mais pas les cotes)
image

Problème de récupération de côte

Bonjour,

Merci pour votre travail, cependant j'ai remarqué quelques problèmes lors de la récupération des côtes chez certains bookmaker. j'ai actuellement 4 ou 5 bookmakers uniquement qui fonctionnent "winamax","pmu","france_pari","zebet","netbet".

Une correction est-il prévu ?

Ajouter une description

Bonjour cher pretrehr!

Peut-être que cette demande ne vous paraîtra pas claire, mais je voudrais vous demander de traduire le menu de votre programme en anglais et d'expliquer quoi et comment l'utiliser. Vous pouvez m'envoyer un courriel à [email protected].
Le fait est que le français n'est pas très clair pour moi, veuillez le faire en anglais. Expliquez-moi tous les menus, je vous en serai très reconnaissant.

Screenshot_8

Le problème de la collecte des résultats

Bonne journée.

Merci pour votre bon travail.
Il y a eu quelques difficultés. Je ne suis pas très doué en programmation, dites-moi la solution à cette erreur.

Jusqu'à la nouvelle année, j'ai utilisé votre programme sans problème, maintenant ce qui suit est apparu, regardez


Traceback (most recent call last):
File "C:\Users\root\sport\sportsbetting\user_functions.py", line 159, in parse_competitions
list_odds = ThreadPool(7).map(lambda x: parse_competitions_site(competitions, sport, x), sites)
File "C:\Users\root\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 364, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Users\root\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 771, in get
raise self._value
File "C:\Users\root\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 125, in worker
result = (True, func(*args, **kwds))
File "C:\Users\root\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 48, in mapstar
return list(map(*args))
File "C:\Users\root\sport\sportsbetting\user_functions.py", line 159, in
list_odds = ThreadPool(7).map(lambda x: parse_competitions_site(competitions, sport, x), sites)
File "C:\Users\root\sport\sportsbetting\user_functions.py", line 104, in parse_competitions_site
list_odds.append(parse_competition(competition, sport, site))
File "C:\Users\root\sport\sportsbetting\user_functions.py", line 91, in parse_competition
res = format_team_names(res_parsing, sport, competition)
File "C:\Users\root\sport\sportsbetting\auxiliary_functions.py", line 143, in format_team_names
list_odds.append(adapt_names(dict_odds[site], site, sport, competition))
File "C:\Users\root\sport\sportsbetting\auxiliary_functions.py", line 127, in adapt_names
add_matches_to_db(odds, sport, site, id_competition)
File "C:\Users\root\sport\sportsbetting\auxiliary_functions.py", line 49, in add_matches_to_db
teams = set(chain.from_iterable(list(map(lambda x: x.split(" - "), list(matches)))))
File "C:\Users\root\sport\sportsbetting\auxiliary_functions.py", line 49, in
teams = set(chain.from_iterable(list(map(lambda x: x.split(" - "), list(matches)))))
AttributeError: 'NoneType' object has no attribute 'split'


Merci d'avoir résolu ma question.

No module named 'colorama'

Hi , i've tried to test your program but i have an issue.
I've install all the modules but still have this message :

"Traceback (most recent call last):
File "C:\prog_py\Sports-betting-master\interface_pysimplegui.py", line 20, in
from sportsbetting.auxiliary_functions import get_nb_issues
File "C:\prog_py\Sports-betting-master\sportsbetting\auxiliary_functions.py", line 14, in
from sportsbetting.database_functions import (get_formatted_name, is_in_db_site, is_in_db,
File "C:\prog_py\Sports-betting-master\sportsbetting\database_functions.py", line 4, in
import colorama
ModuleNotFoundError: No module named 'colorama'

"

Is there something i've done wrong ? ^^'

Thanks for the help anyway !

Slibar

Don't work

interface_pysimplegui.py -work's fine
interface_pysimplegui_english.py - don't workm got this error

C:\Users\1\Downloads\Sports-betting-master>python interface_pysimplegui_english.
py
Chrome version : 90.0.4430.212
C:\Users\1\Downloads\Sports-betting-master\90\chromedriver.exe
Traceback (most recent call last):
File "interface_pysimplegui_english.py", line 23, in
from sportsbetting.interface_functions import (odds_table_combine,
ImportError: cannot import name 'get_main_competitions_interface' from 'sportsbe
tting.interface_functions' (C:\Users\1\Downloads\Sports-betting-master\sportsbet
ting\interface_functions.py)

[ Suggestion ] Screenshots in your readme please

Oh wow.... I can tell from looking at your GUI code that you've got a complex GUI interface. I would love to know how it looks an I'm sure other visitors would too.

It's uncommon for Python programs to have a GUI, it's extra special when you run into one that does have a GUI. I think people are more likely to try out a program if they can see how the program looks. Even if they don't try it, it's still nice to be able to see someone's accomplishment.

Can you add a screenshot to your readme.md file? It's really easy with GitHub to embed an image. All you have to do is grab and drop or copy and paste your image into an Issue and then copy / paste the code that's cred by GitHub into you readme.md file. The same code that embeds an image into an Issue can be used to embed the image into the readme.md file.

parse_football

Hi,

Very interested in using and of course contributing to this project.

Can you please specify where I can find the parse_football() function for example?

Thanks !

Problem with chrome version and chromedriver

WARNING:root:Can not find chromedriver for currently installed chrome version.
Chrome version : 115.0.5790.171
Traceback (most recent call last):
File "C:\Sports-betting-master\Sports-betting-master\interface_pysimplegui.py", line 22, in
import sportsbetting as sb
File "C:\Sports-betting-master\Sports-betting-master\sportsbetting_init_.py", line 101, in
chromedriver_version = PATH_DRIVER.split("\")[-2]
AttributeError: 'NoneType' object has no attribute 'split'

cannot import name 'gcd' from 'fractions'

C:\Users\x\Desktop\Sports-betting-master>python interface_pysimplegui.py
Traceback (most recent call last):
File "C:\Users\x\Desktop\Sports-betting-master\interface_pysimplegui.py", line 20, in
from sportsbetting.auxiliary_functions import get_nb_issues
File "C:\Users\x\Desktop\Sports-betting-master\sportsbetting\auxiliary_functions.py", line 14, in
import baseconvert
File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\baseconvert_init_.py", line 1, in
from baseconvert.baseconvert import BaseConverter
File "C:\Users\x\AppData\Local\Programs\Python\Python39\lib\site-packages\baseconvert\baseconvert.py", line 118, in
from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (C:\Users\x\AppData\Local\Programs\Python\Python39\lib\fractions.py)

Lancement de l'interface graphique

Bonjour,

Ayant bien suivi les étapes :

Téléchargez ou clonez le dépôt
Allez à la racine du projet
Exécutez la commande  

pip install -r requirements.txt

Le terminal ne veut pas me lancer l'interface graphique.
J'ai pourtant bien python3.6 ?

ubuntu@ubuntu-N9EFzeU:~/Sports-betting-master$ python interface_pysimplegui.py Chrome version : 112.0.5615.49 Built on Ubuntu , running on Ubuntu 18.04 Matching Chrome and chromedriver versions /home/ubuntu/miniconda3/lib/python3.6/site-packages/OpenSSL/crypto.py:8: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6. from cryptography import utils, x509 Traceback (most recent call last): File "interface_pysimplegui.py", line 25, in <module> from sportsbetting.user_functions import parse_competitions, get_sports_with_surebet, trj_match File "/home/ubuntu/Sports-betting-master/sportsbetting/user_functions.py", line 8, in <module> import requests File "/home/ubuntu/miniconda3/lib/python3.6/site-packages/requests/__init__.py", line 95, in <module> from urllib3.contrib import pyopenssl File "/home/ubuntu/miniconda3/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 46, in <module> import OpenSSL.SSL File "/home/ubuntu/miniconda3/lib/python3.6/site-packages/OpenSSL/__init__.py", line 8, in <module> from OpenSSL import crypto, SSL File "/home/ubuntu/miniconda3/lib/python3.6/site-packages/OpenSSL/crypto.py", line 3268, in <module> _lib.OpenSSL_add_all_algorithms() AttributeError: module 'lib' has no attribute 'OpenSSL_add_all_algorithms'

Pourriez-vous m'aider ?

Merci d'avance.

Driver not started for unibet

Quand je lance l'interface graphique j'ai une erreur qui tourne en boucle.

Driver not started for unibet
Restarting driver

Update?

Hello
Will there be an update to the script?
Currently, niesety does not want to work.

Invalid decimal literal, demjson

Bonjour,
Je suis totalement inculte en programmation, et j'essaye de faire tourner cette application sans succès.

Lorsque je lance interface_pysimplegui.py j'ai cette erreur :

Exception has occurred: SyntaxError
invalid decimal literal (demjson.py, line 645)
File "C:\Users\User\Desktop\Sports-betting-master\sportsbetting\bookmakers\betway.py", line 8, in
import demjson
File "C:\Users\User\Desktop\Sports-betting-master\sportsbetting\parser_functions.py", line 8, in
from sportsbetting.bookmakers import (betclic, betfair, betway, bwin, france_pari, joa, netbet, parionssport,
File "C:\Users\User\Desktop\Sports-betting-master\sportsbetting\user_functions.py", line 29, in
from sportsbetting.parser_functions import parse
File "C:\Users\User\Desktop\Sports-betting-master\interface_pysimplegui_english.py", line 22, in
from sportsbetting.user_functions import parse_competitions
SyntaxError: invalid decimal literal (demjson.py, line 645)

Est-ce que quelqu'un pourrait m'aider ?

Merci beaucoup.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.