TripAdvisor Hotel Reviews Extract Problems - beautifulsoup

Trying to obtain Hotel Reviews from TripAdvisor. I have a code its running but not retreiving any output, need help to retreive data.
import requests
from bs4 import BeautifulSoup
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET',
'Access-Control-Allow-Headers': 'Content-Type',
'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'accept-language': 'en,mr;q=0.9',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
url = "https://www.tripadvisor.co.uk/Hotel_Review-g304141-d447407-Reviews-or10-Sigiriya_Village_Hotel-Sigiriya_Central_Province.html#REVIEWS"
req = requests.get(url,headers=headers,timeout=5,verify=False)
print (req.status_code)
soup = BeautifulSoup(req.content, 'html.parser')
#review = soup.find_all(class_="XllAv H4 _a").get_text()
#print(review)
for x in soup.body.find_all(class_="bdYc _Q"):
print(x.text)

I can't tell exactly which data you're trying to retrieve, but as a rule of thumb with scraping, try to avoid using attribute/values that don't look human-readable as they're usually randomly generated and tend to change with every load. The individual reviews seem to be in div containers like this with a data-test-target attribute and the review content is nested within in a div with a data-reviewid attribute. You could print the texts with
for t in soup.find_all(lambda t: t.name=='div' and t.get('data-test-target')):
if t.find(lambda c: c.name=='div' and c.get('data-reviewid')): print(t.text)
but it's probably more convenient to just use div[data-test-target]:has(>div[data-reviewid]) as selector instead.
If you want to clean up the text before printing a bit, you could do something like
print((f'\n\n{"-"*130}\n\n').join([f'[Review ID: {i}] --> [{u}]\n{r}' for i, u, r in [(
rev.get("data-reviewid"), rev.parent.div.get_text(" "), rev.get_text("\n", strip=True)
) for rev in soup.select('div[data-test-target] > div[data-reviewid]')]]))
-- it gives me the output:
[Review ID: 863802993] --> [pmudawattage wrote a review Oct 2022 Colombo, Sri Lanka 91 contributions 6 helpful votes]
A great place for a large crowd to relax
More than 200 of us went to the Sigiriya Village Hotel on our company trip. We highly appreciate the systematic arrangement that was present from the entrance to every part of the hotel, throughout the duration of our stay. Everything was organised at the requested times and the room arrangement was good too; there were no complaints from any of the rooms. Special mention to the staff who attended immediately when one of the kids fell sick and helped the parents take the kid to the hospital, we highly appreciate this wonderful gesture and the way everything was handled with great professionalism. The hotel is very spacious. It was easy to reach the Sigiriya rock as well. The food was delicious and the staff was friendly and helpful. Special thanks to the GM, Mr. Gamini for
…
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863756215] --> [nisansala a wrote a review Oct 2022]
Family visit
This hotel excellent and very good place.we enjoy all the family and thnx helping us .thank u sigiri village for excellent advantage give us.and meal is very good buffet is very good and thank u very mich shslika thank u very much supporting us
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863755642] --> [Sithmi Perera wrote a review Oct 2022 1 contribution]
Family Vacation
Highly recommended for a family vacation. The staff, food and the view is really good here. Rooms are tidy and clean and the food is really delicious. We enjoyed alot and hope to visit again. Maleesha the staff member she is really friendly and kind to everyone. Highly recommend this place to everyone who is looking for a great place to spend the vacation.
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863755240] --> [Prasanthika G wrote a review Oct 2022]
Annual Get together
Good and excellent service .. they have and amazing view of the sigiriya rock from the pool.. overall its really good and its a good choice for value .. The staff is really good including Maleesha, shalika, danushka and sajee ...
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863755019] --> [Shiron W wrote a review Oct 2022]
Get together
It was really a nice experience, the games conducted by animation with their leader Shali was really fun.. Everything including the room and other amenities were really good, and the staff was also really kind and friendly...
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863747253] --> [alanka f wrote a review Oct 2022 1 contribution]
Akbar Brothers Annual Trip
Highly Recommend ❗️❗️❗️❗️ The Best hotel i have ever Travelled the location is fantastic Staff Services are Soooo Good Special Thanks To Maleesha Sajee Shalika Dhanushka ♥️ and the View is priceless All the Best Guys
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863746426] --> [THENX O wrote a review Oct 2022 Colombo, Sri Lanka]
Annual Get together
We Had our company get together in Sigiriya Village hotel. It was a marvelous and fascinating experience in here for all of us, the food was all good and the service is really great, also the staff is so friendly and kind. The view from the pool is spectacular, we can get a great view of the sigiriya rock.. Overall everything is perfect, and you should also visit this fascinating place..
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 863745619] --> [ranshana wrote a review Oct 2022 1 contribution]
Annual trip 2022
Hi, starting off with scenery the hotel is amazing covered with greeneries which gives a high value to green life aspect. secondly the staffs and the hotel management was quite good. Next the food was Delicious. I would like to thank all the staff and the management and I myself enjoyed a lot. And I would like to thank Maleesha for the great service she provided.
Read more
Date of stay:
October 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 861920241] --> [Charith B wrote a review Sept 2022 Colombo, Sri Lanka 233 contributions 70 helpful votes]
Best resort closest to the lions rock
Wonderful experience next to Sigiriya. In fact the best hotel that is closest to the rock. Even after 30 years, the hotel looks great and maintenance is superb. Meals are good when set menu style, buffet is moderate. Highly recommend if you are to climb lions rock or pidurangala
Read more
Date of stay:
September 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share
----------------------------------------------------------------------------------------------------------------------------------
[Review ID: 860492183] --> [Oshan Asela wrote a review Sept 2022 1 contribution]
Holiday
Highly recommendable hotel in Sigiriya.Team at sigiriya village welcome you much pleasure and friendly. This place is one of dream holiday destinations. The very definition to hospitality is found here. Its located in a very calm,peaceful and a close to nature area near sigiriya.. The room was very spacious and clean.This is the best hotel if you are looking for a place to stay and relax in Sigiriya. Staff was above 5 stars along with the Manager himself. Food was perfect.They had a variety items of food.srilankan and all other foods were fabulous. We fell in love with this hotel that we would definitely visit again. Thank you Sigiriya village hotel staff
Read more
Date of stay:
September 2022
This review is the subjective opinion of a Tripadvisor member and not of Tripadvisor LLC. Tripadvisor performs checks on reviews.
Helpful
Share

Related

how to get latest App version from itunes

i Want to forcefully update app to user for this i have used https://itunes.apple.com/lookup?id=1240084177 but i am getting no version if i use same url for paytm app with app id 473941634, then getting total response is
{
"resultCount": 1,
"results": [{
"artistViewUrl": "https://itunes.apple.com/us/developer/paytm-mobile-solutions/id473941637?uo=4",
"artworkUrl60": "http://is2.mzstatic.com/image/thumb/Purple118/v4/89/40/71/89407142-20e2-fb81-d9c8-1072ea8ee963/source/60x60bb.jpg",
"artworkUrl100": "http://is2.mzstatic.com/image/thumb/Purple118/v4/89/40/71/89407142-20e2-fb81-d9c8-1072ea8ee963/source/100x100bb.jpg",
"appletvScreenshotUrls": [],
"ipadScreenshotUrls": [],
"artworkUrl512": "http://is2.mzstatic.com/image/thumb/Purple118/v4/89/40/71/89407142-20e2-fb81-d9c8-1072ea8ee963/source/512x512bb.jpg",
"kind": "software",
"features": [],
"supportedDevices": ["iPad2Wifi-iPad2Wifi", "iPad23G-iPad23G", "iPhone4S-iPhone4S", "iPadThirdGen-iPadThirdGen", "iPadThirdGen4G-iPadThirdGen4G", "iPhone5-iPhone5", "iPodTouchFifthGen-iPodTouchFifthGen", "iPadFourthGen-iPadFourthGen", "iPadFourthGen4G-iPadFourthGen4G", "iPadMini-iPadMini", "iPadMini4G-iPadMini4G", "iPhone5c-iPhone5c", "iPhone5s-iPhone5s", "iPadAir-iPadAir", "iPadAirCellular-iPadAirCellular", "iPadMiniRetina-iPadMiniRetina", "iPadMiniRetinaCellular-iPadMiniRetinaCellular", "iPhone6-iPhone6", "iPhone6Plus-iPhone6Plus", "iPadAir2-iPadAir2", "iPadAir2Cellular-iPadAir2Cellular", "iPadMini3-iPadMini3", "iPadMini3Cellular-iPadMini3Cellular", "iPodTouchSixthGen-iPodTouchSixthGen", "iPhone6s-iPhone6s", "iPhone6sPlus-iPhone6sPlus", "iPadMini4-iPadMini4", "iPadMini4Cellular-iPadMini4Cellular", "iPadPro-iPadPro", "iPadProCellular-iPadProCellular", "iPadPro97-iPadPro97", "iPadPro97Cellular-iPadPro97Cellular", "iPhoneSE-iPhoneSE", "iPhone7-iPhone7", "iPhone7Plus-iPhone7Plus", "iPad611-iPad611", "iPad612-iPad612", "iPad71-iPad71", "iPad72-iPad72", "iPad73-iPad73", "iPad74-iPad74"],
"isGameCenterEnabled": false,
"screenshotUrls": ["http://a3.mzstatic.com/us/r30/Purple128/v4/3b/75/42/3b754226-d1a3-d76f-f949-61f572afad7e/screen696x696.jpeg", "http://a4.mzstatic.com/us/r30/Purple118/v4/f3/2e/7d/f32e7de7-3e75-b950-aa65-fde00c0b9bf3/screen696x696.jpeg", "http://a2.mzstatic.com/us/r30/Purple128/v4/66/9a/13/669a13f7-d551-3953-e7e8-61e15a06ec2b/screen696x696.jpeg", "http://a2.mzstatic.com/us/r30/Purple118/v4/2c/9b/f6/2c9bf618-d557-8b45-0f03-5d15aacf9284/screen696x696.jpeg", "http://a4.mzstatic.com/us/r30/Purple118/v4/07/3a/95/073a952a-6e98-eeef-f7e4-4965b31c2de0/screen696x696.jpeg"],
"advisories": [],
"trackViewUrl": "https://itunes.apple.com/us/app/paytm-payments-wallet-recharges/id473941634?mt=8&uo=4",
"trackCensoredName": "Paytm - Payments, Wallet & Recharges",
"contentAdvisoryRating": "4+",
"averageUserRatingForCurrentVersion": 4.5,
"languageCodesISO2A": ["EN", "HI"],
"fileSizeBytes": "131821568",
"sellerUrl": "http://www.paytm.com",
"userRatingCountForCurrentVersion": 16,
"trackContentRating": "4+",
"releaseNotes": "-You can now buy travel insurance along with your flight tickets!\n-Worry no more about your bill payments and recharges. Check out the order summary page when you recharge or pay bills next time to set automatic payments.\n-Get your Paytm KYC process fast forwarded by using your Aadhaar Card\n-Change in plans after booking tickets for a movie? No worries! You can cancel your tickets now with a full refund! \n-UX improvements and bug fixes.",
"wrapperType": "software",
"version": "5.12.0",
"currency": "USD",
"description": "#PaytmKaro for the fastest recharge, bill payment & shopping experience. Quick, easy and secure, Paytm is trusted by over 220 million customers. Recharge your mobile, DTH, data card or metro card & also pay postpaid mobile, landline, electricity, water or gas bills. For your travel needs, book hotels, flight and bus tickets. Also pay school or college fee along with insurance premium. Shop your favourite items at best price. Use any payment option or Paytm Wallet for maximum convenience. \n\nUse Paytm Wallet to send/ receive money, pay for services such as cab or autorickshaw fare, dine-in, petrol pumps & even at a local store near you.\n\nWhat We Offer:\nQuick mobile bill payments & prepaid mobile recharges for Airtel, Vodafone, Idea, Reliance, BSNL, Tata, Aircel, MTS, Uninor, MTNL & more at Paytm\nDTH Recharge for Airtel DTH, Videocon D2H, Dish TV, Tata Sky & Sun TV\nPay Electricity Bills (BSES, NDPL, MSEB, BESCOM etc.) and Water Bills (Delhi Jal Board) or Gas Bill (Adani, Mahanagar, Siti) for various boards \nLandline Bill Payments for Airtel, Reliance, MTS and more \nData Card Recharge for BSNL, Reliance Net Connect, Tata Photon Plus, MTS Data card to name a few\nInstant Educational Fee Payment – Pay admission fee or registration fee of various educational institutes and save time\nRecharge Metro Card Online – Say goodbye to queues, recharge your Delhi metro card or Mumbai metro card instantly \nAdd money to your wallet with debit cards, credit cards, net banking from all leading banks; transfer money to any Paytm Wallet\nPay with Paytm Wallet – Now pay using the Paytm Wallet on your favourite sites like IRCTC, Dominos, PVR and more. Also use the Paytm Wallet to pay for your cab rides at Uber, Meru, Taxiforsure or while booking an auto ride with Jugnoo\nMake instant payments at several local stores through the Paytm Wallet. Pay for Petrol at Indian Oil Petrol Pumps, your favourite food outlet like Vaango & many other local stores\nGold Loan & Insurance Premium Payment – Enjoy easy & seamless insurance premium payment and gold loan payment facility at Paytm \nMovie Ticket Booking – Book tickets for new releases every week\nBus Ticket Booking – Book bus tickets online in minutes at Paytm, pick your preferred seats and get set for the journey\nHotel Booking – Booking hotels has become a convenient task, plan your next trip with Paytm and book hotels online across India\nFlight Booking – Check fares across multiple travel agents and get best fares on domestic flight bookings\nShop On-The-Go – Buy your favourite gadget or discover latest trends in lifestyle, explore an amazing shopping experience for over 1,000+ categories\nHassle-free Returns on Shopping – Not happy with what you’ve got? No worries, we’ll pick it up from you, without you having to bat an eyelid\nGet Exciting Cashback on mobile recharges, bill payments, shopping & more\nOrder History – Now all your recharge, bill payments & orders will show up at one place, track or repeat them with ease in future\n24x7 Customer Care – 0120-38883888\n\nKey Features:\nBrowse Plans – View tariff plans on full talktime, top-up, 3G and 2G data recharge on all major prepaid mobile operators in India\nEasy & Instant Recharge – Use your phonebook easily to pick and recharge numbers, we remember all your recent mobile recharge, DTH recharge & bill payment for convenient one-click recharge experience\nScan & Pay – Scan & use the QR code to pay at your local stores or pay for fuel\nDownload this amazing app and recharge your prepaid mobile phones, pay bills of postpaid mobiles, electricity, landline, datacard & DTH for non-stop service and enjoy an awesome shopping experience with great value offers of your choice within one click, at great prices!",
"artistId": 473941637,
"artistName": "Paytm Mobile Solutions",
"genres": ["Shopping", "Lifestyle"],
"price": 0.00,
"trackId": 473941634,
"trackName": "Paytm - Payments, Wallet & Recharges",
"bundleId": "com.one97.paytm",
"currentVersionReleaseDate": "2017-08-15T03:10:10Z",
"formattedPrice": "Free",
"primaryGenreName": "Shopping",
"isVppDeviceBasedLicensingEnabled": true,
"releaseDate": "2011-10-24T23:18:48Z",
"minimumOsVersion": "8.0",
"primaryGenreId": 6024,
"sellerName": "PayTM Mobile Solutions Private Limited",
"genreIds": ["6024", "6012"],
"averageUserRating": 4.5,
"userRatingCount": 1688
}]
}
while both app is lived on appstore.
Problem in your URL. When you want your app version and other details. You need to set url like https://itunes.apple.com/us/lookup?id=1240084177 like this.
You have to specify country code you will get all details like you want.
E.g. https://itunes.apple.com/in/lookup?id=1240084177

A desert for odoo folks: filter partners in mail.wizard.invite

I want to extend the mail module so i can add a little functionality : invite only followers that are employees.(social networking)
in other words:
for record in res.partners
user=self.env['res.users'].search([('partner_id',"=",record.ID)])
employee=self.env['hr.employee'].search([('user_id',"=",user.ID)])
get the employee information and stock it somewhere
someone to help me to translate this in python x)

How can I use Stripe to delay charging a customer until a physical item is shipped?

I'm in the process of building an online marketplace which sells shippable goods. The site will be similar to Etsy, which will connect merchants with buyers.
I'd like to be able to charge a customer's card ONLY when an item is shipped by a merchant to avoid chargebacks and provide an Amazon-like payment experience. This will also help us avoid chargebacks and payment disputes in case a merchant is slow to ship or flakes out. In some cases, the goods will take more than 7 days to be custom manufactured and shipped out
Here's an example timeline:
1/1/2014 - Customer adds $75 worth of items to their cart and clicks "buy". Enters credit card info.
1/1/2014 - Customer's card is verified and a $75 temporary hold is placed on their card. Order is sent to merchant for fulfillment.
1/14/2014 - Merchant ships goods to customer and adds shipping tracking info
1/14/2014 - Customer's card is charged for the full amount and merchant receives $75 minus fees.
I plan to use Stripe Connect for payment processing, but am not sure how to delay capturing a payment for more than 7 days. Any thoughts? I don't want to aggregate the funds under my own account and use payouts since this will likely run afoul of money transmission laws. Any help would be appreciated!
EDIT: It looks like Quora has a similar question here , but the answers don't seem to deal with the case where a merchant ships out the item but the payment fails.
After further research, it seems there's no way to delay capturing a charge past the 7 day authorization window.
But here's one way to delay a charge:
Tokenize a credit card using the stripe.js library
Create a new stripe customer passing in the token as the "card" param
An example from the Stripe FAQ: https://support.stripe.com/questions/can-i-save-a-card-and-charge-it-later
Note that the longer you wait between tokenizing a card and actually charging it, the more likely your charge will be declined for various reasons (expired card, lack of funds, fraud, etc). This also adds a layer of complexity (and lost sales) since you'll need to ask a buyer to resubmit payment info.
I'd still like to confirm that a certain amount can be charged (like a "preauthorization"), but this lets me at least charge the card at a later date.
Celery has built a service to help you do this with Stripe. They are very easy to use, but note that they charge 2% per transaction.
actually you can save user token and pay later with tracking info
# get the credit card details submitted by the form or app
token = params[:stripeToken]
# create a Customer
customer = Stripe::Customer.create(
card: token,
description: 'description for payinguser#example.com',
email: 'payinguser#example.com'
)
# charge the Customer instead of the card
Stripe::Charge.create(
amount: 1000, # in cents
currency: 'usd',
customer: customer.id
)
# save the customer ID in your database so you can use it later
save_stripe_customer_id(user, customer.id)
# later
customer_id = get_stripe_customer_id(user)
Stripe::Charge.create(
amount: 1500, # $15.00 this time
currency: 'usd',
customer: customer_id
)
Stripe release a delay method to place a hold without charging. https://stripe.com/docs/payments/capture-later
<?php
require_once('stripe-php/init.php');
\Stripe\Stripe::setApiKey('your stripe key');
$token = $_POST['stripeToken'];
$stripeinfo = \Stripe\Token::retrieve($token);
$email = $stripeinfo->email;
$customer = \Stripe\Customer::create(array(
"source" => $token,
"email" => $email)
);
?>

ESPN API - How can I retrieve college basketball conferences using the Teams API?

The support forums on ESPN.com recommend using Stack Overflow with the ESPN tag. That's why I'm here.
I'm trying to obtain a list of all NCAA college basketball teams using ESPN's Teams API. I started with this GET request:
http://api.espn.com/v1/sports/basketball/mens-college-basketball/teams?apikey=MY_API_KEY
That gave me a list of teams, but many of them are missing. For example, there is no Nebraska. So then I thought that maybe I need to get a list of teams by conference. So I read this in the documentation:
GROUPS: Allows for filtering by "group" or division, e.g. AL East, NFC South, etc. For group IDs and their corresponding values, make a request to http://developer.espn.com/v1/{resource}/leagues. Not applicable to golf and tennis.
So then I try to make a request to `http://developer.espn.com/v1/sports/basketball/mens-college-basketball/leagues?apikey=MY_API_KEY' and it says the page does not exist.
Is this a bug or user error?
First, I think you forgot sports in the resource. Try this:
http://api.espn.com/v1/sports/basketball/mens-college-basketball?apikey=MY_API_KEY&leagues
That will return a mapping of integers to conferences it seems according to the documentation.
That fetched me:
{"name" :"Atlantic Coast Conference","abbreviation" :"acc","groupId" :2,"shortName" :"ACC"}
...and much more.
Then once you have that, let's say 2 = ACC. You should be able to do this:
http://api.espn.com/v1/sports/basketball/mens-college-basketball?groups=2&apikey=MY_API_KEY'
to get everything on ACC mens' basketball teams.
Bear in mind the API is in beta though.
I could not figure out how to get a list of conferences, but I found out how to get the missing teams. When I was making the first get request, it was limiting me to 50 results by default:
http://api.espn.com/v1/sports/basketball/mens-college-basketball/teams?apikey=MY_API_KEY
They have a sandbox where you can play with your parameters, and I saw a limit and offset option:
http://developer.espn.com/io-docs
To get more than 50 results, you have to make multiple requests using the limit and offset parameters.
First Call:
http://api.espn.com/v1/sports/basketball/mens-college-basketball/teams/?limit=50&offset=0&_accept=text%2Fxml&apikey=MY_API_KEY
Next Call:
http://api.espn.com/v1/sports/basketball/mens-college-basketball/teams/?limit=50&offset=50&_accept=text%2Fxml&apikey=MY_API_KEY
And so on...

How can I write software that does bank account transfers? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
You know those websites that let you type in your checking account number and the routing number, and then they can transfer money to and from your account?
How does that work? Any good services or APIs for doing that? Any gotchas?
The banks do have APIs for doing this, but only approved people/companies are allowed to interface with these systems. Because it actually involves transferring money around, the security requirements are pretty high in terms of how you handle the account numbers on your system.
Many sites that offer this feature for buying goods actually use a third party system to handle the actual money transfer into their account. This lowers the amount of trouble to implement the API, as well as putting the burden of security on the third party handling the money transfers.
If you are serious about setting up a system where you can accept bank account numbers, and exchange funds, you should contact your bank, and see what the actual requirements for implementing such a system. Each bank has their own system, along with their own rate regarding the cost of these transactions.
Some third parties I'm aware of are
Moneris
Cactus
Beanstream
I'm in Canada, although I think Moneris and Cactus operate in the US. I think Beanstream doesn't. Again, you can talk to your bank, and they can probably get you in touch with a third party who will help you with the transactions.
If you want to be able to initiate transfer of funds between accounts in different financial institutions (using account and routing number), you need to find a payment processing company that offers ACH (http://en.wikipedia.org/wiki/Automated_Clearing_House) transfer services. Usually these companies are subsidiary of a financial institution that already has access to ACH. For example. one such company is ACH Direct (http://www.achdirect.com/). I can't vouch for its services or reliability though, I am just giving it here as an example of what type of companies you need to search.
Of course, technically, you could try to connect to ACH directly. However, to do this, you need to follow the rules and regulations of NACHA (http://en.wikipedia.org/wiki/NACHA-The_Electronic_Payments_Association) when writing your software and pass rigorous certification. It's quite a big investment, so unless you are backed by couple of bilions of dollars, I wouldn't advise attempting this.
You can do this with a Moneris US eSELECTplus merchant account - you just need to have Automated Clearing House (ACH) enabled on your merchant account (unfortunately there is no equivalent to ACH currently available in Canada).
Here's an example of what a debit transaction looks like in the Moneris US PHP API:
<?php
require "../mpgClasses.php";
/************************ Request Variables **********************************/
$store_id='monusqa002'; //account credentials
$api_token='qatoken';
/************************ Transaction Object******************************/
$txnArray=array(type=>'us_ach_debit',
order_id=>'ach-'.date("dmy-G:i:s"),
cust_id=> 'my cust id',
amount=>'1.00'
);
$achTemplate = array(
sec =>'ppd',
cust_first_name => 'Bob',
cust_last_name => 'Smith',
cust_address1 => '101 Main St',
cust_address2 => 'Apt 102,
cust_city => 'Chicago',
cust_state => 'IL',
cust_zip =>'123456',
routing_num => '490000018',
account_num => '23456',
check_num => '100',
account_type => 'savings'
);
$mpgAchInfo = new mpgAchInfo ($achTemplate);
$mpgTxn = new mpgTransaction($txnArray);
$mpgTxn->setAchInfo($mpgAchInfo);
$mpgRequest = new mpgRequest($mpgTxn);
$mpgHttpPost = new mpgHttpsPost($store_id,$api_token,$mpgRequest);
/************************ Response Object **********************************/
$mpgResponse=$mpgHttpPost->getMpgResponse();
print("\nCardType = " . $mpgResponse->getCardType());
print("\nTransAmount = " . $mpgResponse->getTransAmount());
print("\nTxnNumber = " . $mpgResponse->getTxnNumber());
print("\nReceiptId = " . $mpgResponse->getReceiptId());
print("\nTransType = " . $mpgResponse->getTransType());
print("\nReferenceNum = " . $mpgResponse->getReferenceNum());
print("\nResponseCode = " . $mpgResponse->getResponseCode());
print("\nMessage = " . $mpgResponse->getMessage());
print("\nAuthCode = " . $mpgResponse->getAuthCode());
print("\nComplete = " . $mpgResponse->getComplete());
print("\nTransDate = " . $mpgResponse->getTransDate());
print("\nTransTime = " . $mpgResponse->getTransTime());
print("\nTicket = " . $mpgResponse->getTicket());
print("\nTimedOut = " . $mpgResponse->getTimedOut());
?>
The API files and integration guides for Moneris USA are available at:
http://developer.moneris.com (free registration required)
Moneris USA - ACH:
http://www.monerisusa.com/payment-processing-services/ach-direct-debit.aspx
Stripe Connect allows you to transfer money to bank accounts and to accept payments through one unified API. As of December 2015 they provide more thorough documentation and in general seem to be a more popular option among developers than most of the companies mentioned in other answers.
See https://stripe.com/docs/connect for more info.
Paypal has a fairly accessible API you can use within your program to accomplish some of this.
Pretty straightforward way of doing ACH transfers - https://www.dwolla.com/white-label
Depending on what you want to your application to do you'll need different functionality.
If you want to pay (credit) bank accounts. It's pretty straight forward. Here are the steps:
1. Create a member
2. Create a funding source
3. Create a transfer
If you want to debit and credit bank accounts it gets a little more complex. Here are the steps:
1. Create a member
2. Get a funding source authorization
3. Create a transfer
The only reason the authorization is a little harder is because you have to go through a 2 deposit method or a verification flow of some type. This gets a lot easier with Dwolla.js - https://www.dwolla.com/dwollajs-bank-verification