Пример #1
0
import json
from two1.commands.config import Config
from two1.wallet import Wallet
from two1.bitrequests import BitTransferRequests

wallet = Wallet()
username = Config().username
requests = BitTransferRequests(wallet, username)

# Set up the server to run locally
#server_url = 'http://localhost:5000/'
server_url = 'http://10.244.117.238:5000/'

# Request the 402 end-points from the server and assign price and address to variables.
info = requests.get_402_info(url=server_url + 'top-stories')
endpoint_info = dict(info)
price = int(endpoint_info['price'])
address = str(endpoint_info['bitcoin-address'])

# Array of all the top-story sections
sections = [
    "home", "world", "national", "politics", "nyregion", "business", "opinion",
    "technology", "health", "sports", "arts", "fashion", "dining", "travel",
    "magazine", "realestate"
]


def get_top_stories(section):
    params = {'section': section}
    response = requests.post(url=server_url + 'top-stories', data=params)
Пример #2
0
import json
from two1.commands.config import Config
from two1.wallet import Wallet
from two1.bitrequests import BitTransferRequests

wallet = Wallet()
username = Config().username
requests = BitTransferRequests(wallet, username)

# Set up the server to run locally
#server_url = 'http://localhost:5000/'
server_url = 'http://10.244.117.238:5000/'


# Request the 402 end-points from the server and assign price and address to variables.
info = requests.get_402_info(url=server_url+'top-stories')
endpoint_info = dict(info)
price = int(endpoint_info['price'])
address = str(endpoint_info['bitcoin-address'])

# Array of all the top-story sections
sections = ["home", "world", "national", "politics",
            "nyregion", "business", "opinion", "technology",
            "health", "sports", "arts", "fashion", "dining", 
            "travel", "magazine", "realestate"]


def get_top_stories(section):
    params = {
        'section': section
    }
Пример #3
0
    def buy(config, resource, data, method, data_file, output_file,
            payment_method, max_price, info_only):
        """Buy from any machine payable endpoint

           Note: The two1lib _buy function does not support simply returning an object,
                 until then, include a local copy here
        """
        # If resource is a URL string, then bypass seller search
        if URL_REGEXP.match(resource):
            target_url = resource
            seller = target_url
        elif resource in DEMOS:
            target_url = TWO1_WWW_HOST + DEMOS[resource]["path"]
            data = json.dumps(data)
        else:
            raise NotImplementedError('Endpoint search is not implemented!')

        # Change default HTTP method from "GET" to "POST", if we have data
        if method == "GET" and (data or data_file):
            method = "POST"

        # Set default headers for making bitrequests with JSON-like data
        headers = {'Content-Type': 'application/json'}

        try:
            # Find the correct payment method
            if payment_method == 'offchain':
                bit_req = BitTransferRequests(config.machine_auth,
                                              config.username)
            elif payment_method == 'onchain':
                bit_req = OnChainRequests(config.wallet)

            else:
                raise Exception('Payment method does not exist.')

            # Make the request
            if info_only:
                res = bit_req.get_402_info(target_url)
            else:
                res = bit_req.request(method.lower(),
                                      target_url,
                                      max_price=max_price,
                                      data=data or data_file,
                                      headers=headers)
        except ResourcePriceGreaterThanMaxPriceError as e:
            config.log(
                uxstring.Error.resource_price_greater_than_max_price.format(e))
            return
        except Exception as e:
            if 'Insufficient funds.' in str(e):
                config.log(
                    uxstring.Error.insufficient_funds_mine_more.format(
                        DEFAULT_ONCHAIN_BUY_FEE))
            else:
                config.log(str(e), fg="red")
            return

        # Output results to user
        if output_file:
            # Write response output file
            output_file.write(res.content)
        elif info_only:
            # Print headers that are related to 402 payment required
            for key, val in res.items():
                config.log('{}: {}'.format(key, val))
        elif resource in DEMOS:
            config.log(DEMOS[resource]["formatter"](res))
        else:
            response = res.json()
            # Clean up names
            for index, elem in enumerate(response):
                if elem['name'] is None:
                    response[index]['name'] = 'Please name me'
                elif len(elem['name']) == 0:
                    response[index]['name'] = 'Please name me'
                else:
                    response[index]['name'] = response[index]['name'].title()
                print(elem['description'])
                if elem['description'] is None:
                    try:
                        response[index]['description'] = elem['owner'].title(
                        ) + ' is a bad endpoint operator and forgot to place a description'
                    except:
                        response[index][
                            'description'] = 'Anonymous is a bad endpoint operator and forgot to place a description'
                # Any description greater than 66 characters causes the text to overflow, this enforces a limit
                elif len(elem['description']) > 63:
                    response[index]['description'] = response[index][
                        'description'][:63] + '...'

            # Write response to console
            return response

        # Write the amount paid out if something was truly paid
        if not info_only and hasattr(res, 'amount_paid'):
            client = rest_client.TwentyOneRestClient(TWO1_HOST,
                                                     config.machine_auth,
                                                     config.username)
            user_balances = _get_balances(config, client)
            if payment_method == 'offchain':
                balance_amount = user_balances.twentyone
                balance_type = '21.co'
            elif payment_method == 'onchain':
                balance_amount = user_balances.onchain
                balance_type = 'blockchain'

        # Record the transaction if it was a payable request
        if hasattr(res, 'paid_amount'):
            config.log_purchase(s=seller,
                                r=resource,
                                p=res.paid_amount,
                                d=str(datetime.datetime.today()))