# Module `telegram_bot.shares.share_fetcher`

script for share fetching (by symbols (e.g. AAPL, TSLA etc.))

Expand source code

    """
    script for share fetching (by symbols (e.g. AAPL, TSLA etc.))
    """
    __author__ = "Florian Kellermann, Linus Eickhoff"
    __date__ = "10.05.2022"
    __version__ = "1.0.1"
    __license__ = "None"

    import telegram_bot.helper_functions as hf
    import investpy
    import pandas
    from currency_converter import CurrencyConverter

    def get_share_price(str_search_for):
        """get stock price per share for company name or isin or symbol

        Args:
            str_search_for (string): search for this string/isin

        Returns: none
        """
        try:
            search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1, countries=['germany'])

            currency = str(search_result.retrieve_currency()) # retrieve currency from data
            # should always be Euro because of countries=['germany']

            recent_data = pandas.DataFrame(search_result.retrieve_recent_data()) # stock prices of last few days

            stock_price = recent_data.iloc[-1]["Close"] # retrieve latest stock price

            stock_price = round(float(stock_price), 2)

            str_return =str(stock_price) + " " + str(currency) # return + currency

            return str_return

        except RuntimeError: # if no shares are found for germany (e.g. isin: US.....)
            try:
                my_Converter = CurrencyConverter() # need a currency converter

                search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1)

                currency = str(search_result.retrieve_currency())

                recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

                stock_price = recent_data.iloc[-1]["Close"]

                #convert stock price from currency to EUR
                stock_price = my_Converter.convert(float(stock_price), str(currency), 'EUR')

                stock_price = round(float(stock_price), 2)

                str_return = str(stock_price) + " EUR"

                return str_return

            except RuntimeError:
                return "None"

    def get_share_price_no_currency(str_search_for):
        """get stock price per share for company name or isin or symbol no currency
        Args:
            str_search_for (string): search for this string/isin
        Returns: none
        """
        try:
            search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                   countries=['germany'], n_results=1)

            recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

            stock_price = recent_data.iloc[-1]["Close"]

            stock_price = round(float(stock_price), 2)

            return stock_price

        except RuntimeError:
            my_Converter = CurrencyConverter()

            search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1)

            currency = str(search_result.retrieve_currency())

            recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

            stock_price = recent_data.iloc[-1]["Close"]

            stock_price = my_Converter.convert(float(stock_price), str(currency), 'EUR')

            stock_price = round(float(stock_price), 2)

            str_return = str(stock_price)

            return str_return

    def get_share_information(str_search_for):
        search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                               countries=['germany'], n_results=1)

        str_return = "Company: " + search_result.name + "\nSymbol: " + search_result.symbol + "\nCurrent Price/Share: " + get_share_price(str_search_for)

        return str_return

    def get_share_information_markdown(str_search_for):

        try:
            search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                    countries=['germany'], n_results=1)

        except RuntimeError as e:
            return hf.make_markdown_proof(f"no shares found for \"{str_search_for}\"") # if no shares are found, make error message markdown proof and return

        except ConnectionError as e:
            return hf.make_markdown_proof(f"connection not possible. Try again later.") # if no connection, make error message markdown proof and return

        str_return = f'*{hf.make_markdown_proof(search_result.name)}*\n_{hf.make_markdown_proof(search_result.symbol)}_\nworth: {hf.make_markdown_proof(get_share_price(str_search_for))}'
        return str_return

    def get_share_information_simple(str_search_for):
        search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                               countries=['germany'], n_results=1)

        str_return = search_result.name + "\n" + search_result.symbol + "\nworth: " + get_share_price(str_search_for)
        return str_return

    if __name__ == "__main__":
        print("None")

## Functions

`def get_share_information(str_search_for)`
  Expand source code

      def get_share_information(str_search_for):
          search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                 countries=['germany'], n_results=1)

          str_return = "Company: " + search_result.name + "\nSymbol: " + search_result.symbol + "\nCurrent Price/Share: " + get_share_price(str_search_for)

          return str_return

`def get_share_information_markdown(str_search_for)`
  Expand source code

      def get_share_information_markdown(str_search_for):

          try:
              search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                      countries=['germany'], n_results=1)

          except RuntimeError as e:
              return hf.make_markdown_proof(f"no shares found for \"{str_search_for}\"") # if no shares are found, make error message markdown proof and return

          except ConnectionError as e:
              return hf.make_markdown_proof(f"connection not possible. Try again later.") # if no connection, make error message markdown proof and return

          str_return = f'*{hf.make_markdown_proof(search_result.name)}*\n_{hf.make_markdown_proof(search_result.symbol)}_\nworth: {hf.make_markdown_proof(get_share_price(str_search_for))}'
          return str_return

`def get_share_information_simple(str_search_for)`
  Expand source code

      def get_share_information_simple(str_search_for):
          search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                 countries=['germany'], n_results=1)

          str_return = search_result.name + "\n" + search_result.symbol + "\nworth: " + get_share_price(str_search_for)
          return str_return

`def get_share_price(str_search_for)`

  get stock price per share for company name or isin or symbol

  ## Args

  `str_search_for` :`string`
    search for this string/isin

  Returns: none

  Expand source code

      def get_share_price(str_search_for):
          """get stock price per share for company name or isin or symbol

          Args:
              str_search_for (string): search for this string/isin

          Returns: none
          """
          try:
              search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1, countries=['germany'])

              currency = str(search_result.retrieve_currency()) # retrieve currency from data
              # should always be Euro because of countries=['germany']

              recent_data = pandas.DataFrame(search_result.retrieve_recent_data()) # stock prices of last few days

              stock_price = recent_data.iloc[-1]["Close"] # retrieve latest stock price

              stock_price = round(float(stock_price), 2)

              str_return =str(stock_price) + " " + str(currency) # return + currency

              return str_return

          except RuntimeError: # if no shares are found for germany (e.g. isin: US.....)
              try:
                  my_Converter = CurrencyConverter() # need a currency converter

                  search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1)

                  currency = str(search_result.retrieve_currency())

                  recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

                  stock_price = recent_data.iloc[-1]["Close"]

                  #convert stock price from currency to EUR
                  stock_price = my_Converter.convert(float(stock_price), str(currency), 'EUR')

                  stock_price = round(float(stock_price), 2)

                  str_return = str(stock_price) + " EUR"

                  return str_return

              except RuntimeError:
                  return "None"

`def get_share_price_no_currency(str_search_for)`

  get stock price per share for company name or isin or symbol no currency

  ## Args

  `str_search_for` :`string`
    search for this string/isin

  Returns: none

  Expand source code

      def get_share_price_no_currency(str_search_for):
          """get stock price per share for company name or isin or symbol no currency
          Args:
              str_search_for (string): search for this string/isin
          Returns: none
          """
          try:
              search_result = investpy.search_quotes(text=str_search_for, products=['stocks'],
                                                     countries=['germany'], n_results=1)

              recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

              stock_price = recent_data.iloc[-1]["Close"]

              stock_price = round(float(stock_price), 2)

              return stock_price

          except RuntimeError:
              my_Converter = CurrencyConverter()

              search_result = investpy.search_quotes(text=str_search_for, products=['stocks'], n_results=1)

              currency = str(search_result.retrieve_currency())

              recent_data = pandas.DataFrame(search_result.retrieve_recent_data())

              stock_price = recent_data.iloc[-1]["Close"]

              stock_price = my_Converter.convert(float(stock_price), str(currency), 'EUR')

              stock_price = round(float(stock_price), 2)

              str_return = str(stock_price)

              return str_return