PHPackages                             michaelcrowcroft/bing-webmaster-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. michaelcrowcroft/bing-webmaster-laravel

ActiveLibrary

michaelcrowcroft/bing-webmaster-laravel
=======================================

A Laravel package for Bing's Webmaster API

09PHP

Since Aug 25Pushed 8mo agoCompare

[ Source](https://github.com/MichaelCrowcroft/bing-webmaster-laravel)[ Packagist](https://packagist.org/packages/michaelcrowcroft/bing-webmaster-laravel)[ RSS](/packages/michaelcrowcroft-bing-webmaster-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require michaelcrowcroft/bing-webmaster-laravel
```

Configuration
-------------

[](#configuration)

### Publish Configuration

[](#publish-configuration)

Publish the configuration file:

```
php artisan vendor:publish --provider="MichaelCrowcroft\\BingWebmaster\\BingWebmasterServiceProvider" --tag="bing-webmaster-config"
```

Token Management
----------------

[](#token-management)

This package requires access tokens to be passed explicitly. This design supports multi-tenant applications where different users have different Bing Webmaster tokens.

### Setting Access Tokens

[](#setting-access-tokens)

You must set the access token before making API calls:

```
use BingWebmaster;

// Method 1: Set token on facade instance
BingWebmaster::setAccessToken($user->bing_access_token);

// Method 2: Create instance with token
$bing = new BingWebmaster($user->bing_access_token);

// Method 3: Create instance and set token
$bing = new BingWebmaster();
$bing->setAccessToken($user->bing_access_token);
```

Usage
-----

[](#usage)

### Basic Setup

[](#basic-setup)

```
use BingWebmaster;

class BingWebmasterController extends Controller
{
    public function dashboard(Request $request)
    {
        try {
            // Set the user's access token (required)
            BingWebmaster::setAccessToken($request->user()->bing_access_token);

            // Get user sites
            $sitesRequest = BingWebmaster::getUserSites();
            $sites = $sitesRequest->getFormattedSites();

            if (empty($sites)) {
                return view('bing.dashboard', [
                    'error' => 'No sites found in Bing Webmaster Tools.'
                ]);
            }

            $siteUrl = $sites[0]['url']; // Adjust based on actual response structure

            // Get rank and traffic statistics
            $trafficRequest = BingWebmaster::getRankAndTrafficStats($siteUrl, [
                'start_date' => now()->subDays(30)->format('Y-m-d'),
                'end_date' => now()->subDay()->format('Y-m-d'),
                'aggregation' => 'daily'
            ]);

            $trafficStats = $trafficRequest->getFormattedStats();

            return view('bing.dashboard', [
                'sites' => $sites,
                'trafficStats' => $trafficStats,
                'siteUrl' => $siteUrl
            ]);

        } catch (\Exception $e) {
            Log::error('Bing Webmaster API error', [
                'message' => $e->getMessage(),
                'code' => $e->getCode()
            ]);

            return view('bing.dashboard', [
                'error' => 'Failed to fetch data from Bing Webmaster. Please try again later.'
            ]);
        }
    }
}
```

### Using the Facade

[](#using-the-facade)

```
use BingWebmaster;

class BingService
{
    public function getSitePerformance(string $siteUrl, string $accessToken, int $days = 30): array
    {
        // Set the access token for this user's session
        BingWebmaster::setAccessToken($accessToken);

        $endDate = now()->subDay()->format('Y-m-d');
        $startDate = now()->subDays($days)->format('Y-m-d');

        return [
            'traffic' => BingWebmaster::getRankAndTrafficStats($siteUrl, [
                'start_date' => $startDate,
                'end_date' => $endDate
            ])->getFormattedStats(),

            'keywords' => BingWebmaster::getKeywordStats($siteUrl, [
                'start_date' => $startDate,
                'end_date' => $endDate,
                'limit' => 50
            ])->getFormattedStats(),

            'pages' => BingWebmaster::getPageStats($siteUrl, [
                'start_date' => $startDate,
                'end_date' => $endDate,
                'limit' => 50
            ])->getFormattedStats(),

            'queries' => BingWebmaster::getQueryStats($siteUrl, [
                'start_date' => $startDate,
                'end_date' => $endDate,
                'limit' => 50
            ])->getFormattedStats(),

            'period' => "$startDate to $endDate",
        ];
    }
}
```

API Endpoints
-------------

[](#api-endpoints)

### Get User Sites

[](#get-user-sites)

Get all sites accessible to the authenticated user:

```
use BingWebmaster;

$sitesRequest = BingWebmaster::getUserSites();
$sites = $sitesRequest->getFormattedSites();

// Alternative: Execute directly
$sitesResponse = BingWebmaster::getUserSites()->getFormattedSites();
```

### Rank and Traffic Statistics

[](#rank-and-traffic-statistics)

Get rank and traffic performance data:

```
$siteUrl = 'https://www.example.com';

// Basic traffic stats
$trafficStats = BingWebmaster::getRankAndTrafficStats($siteUrl, [
    'start_date' => '2024-01-01',
    'end_date' => '2024-01-31',
    'aggregation' => 'daily'
])->getFormattedStats();

// Get summary only
$summary = BingWebmaster::getRankAndTrafficStats($siteUrl)->getSummary();

// Get daily data only
$dailyData = BingWebmaster::getRankAndTrafficStats($siteUrl)->getData();
```

### Keyword Statistics

[](#keyword-statistics)

Get keyword-level performance data:

```
$keywordStats = BingWebmaster::getKeywordStats($siteUrl, [
    'start_date' => '2024-01-01',
    'end_date' => '2024-01-31',
    'limit' => 100
])->getFormattedStats();

// Get top keywords by clicks
$topKeywords = BingWebmaster::getKeywordStats($siteUrl)->getTopKeywordsByClicks(10);

// Get top keywords by impressions
$topImpressions = BingWebmaster::getKeywordStats($siteUrl)->getTopKeywordsByImpressions(10);
```

### Page Statistics

[](#page-statistics)

Get page-level performance data:

```
$pageStats = BingWebmaster::getPageStats($siteUrl, [
    'start_date' => '2024-01-01',
    'end_date' => '2024-01-31',
    'limit' => 100
])->getFormattedStats();

// Get top pages by clicks
$topPages = BingWebmaster::getPageStats($siteUrl)->getTopPagesByClicks(10);

// Get top pages by impressions
$topImpressions = BingWebmaster::getPageStats($siteUrl)->getTopPagesByImpressions(10);

// Get best performing pages by position
$bestPosition = BingWebmaster::getPageStats($siteUrl)->getTopPagesByPosition(10);
```

### Query Statistics

[](#query-statistics)

Get search query performance data:

```
$queryStats = BingWebmaster::getQueryStats($siteUrl, [
    'start_date' => '2024-01-01',
    'end_date' => '2024-01-31',
    'limit' => 100
])->getFormattedStats();

// Get top queries by clicks
$topQueries = BingWebmaster::getQueryStats($siteUrl)->getTopQueriesByClicks(10);

// Get top queries by impressions
$topImpressions = BingWebmaster::getQueryStats($siteUrl)->getTopQueriesByImpressions(10);
```

### URL Submission

[](#url-submission)

Submit URLs for indexing:

```
// Submit a single URL
$result = BingWebmaster::submitUrl($siteUrl, 'https://www.example.com/new-page')->submit();

// Check if submission was successful
$success = BingWebmaster::submitUrl($siteUrl, 'https://www.example.com/new-page')->wasSuccessful();
```

### Sitemap Submission

[](#sitemap-submission)

Submit sitemaps for crawling:

```
// Submit a single sitemap
$result = BingWebmaster::submitSitemap($siteUrl, 'https://www.example.com/sitemap.xml')->submit();

// Submit multiple sitemaps
$sitemapUrls = [
    'https://www.example.com/sitemap.xml',
    'https://www.example.com/blog-sitemap.xml',
    'https://www.example.com/products-sitemap.xml'
];
$results = BingWebmaster::submitSitemap($siteUrl, '')->submitMultiple($siteUrl, $sitemapUrls);
```

Laravel Commands
----------------

[](#laravel-commands)

Create a command to generate Bing Webmaster reports:

```
