API WordPress.org - Nhận plugin bổ sung yêu thích của tác giả


7

Đã có một số bổ sung gần đây vào kho lưu trữ plugin WordPress.org. Đáng chú ý nhất là các thay đổi đối với trang plugin và trang hồ sơ tác giả hiện hiển thị các plugin yêu thích của tác giả .

Tôi muốn tạo một plugin tiện ích thanh bên hiển thị mục yêu thích của tác giả plugin. Tôi biết cách sử dụng API để lấy số liệu thống kê plugin và cũng đã đọc Tài liệu API của DD32 nhưng tôi không tin tài liệu tồn tại trên hồ sơ hoặc nếu API hồ sơ thậm chí còn tồn tại.

Tôi đã cố gắng sử dụng wp_remote_getvà tôi có thể lấy html cơ thể từ trang hồ sơ nhưng chưa thử và phân tích nó vì nó có vẻ là một cách để làm rối tung nó. Sẽ thật tuyệt nếu tôi có thể lấy hồ sơ bằng XML hoặc json.

Có phương pháp nào tôi thiếu hoặc API hồ sơ tồn tại không?

Biên tập:

Ok tôi có phiên bản beta trên github bằng trình phân tích cú pháp SimpleHTML Dom. Tôi không nghĩ rằng tôi sẽ có thể được xếp hạng sao nhưng tôi khá hài lòng với kết quả như lần đầu tiên không có API.

WordPress.org không cho phép quét nội dung và sẽ cấm bạn (thông qua @otto). Vì vậy, điều này là không cần thiết cho đến khi một API công khai được phát hành.


1
Là một giải pháp tạm thời cho đến khi Otto triển khai API hồ sơ - sử dụng Trình phân tích cú pháp SimpleHTMLDom để cạo nội dung bạn cần. Nếu bạn có thể lấy URL hồ sơ tác giả theo chương trình thì bạn nên đi. Trao đổi với các lệnh gọi API chính thức khi sẵn sàng. Simplehtmldom.sourceforge.net & simplehtmldom.sourceforge.net/manual.htm
Adam

Ý tưởng tuyệt vời Tôi đã có thể tạo các url và nhận đầu ra html từ trang.
Chris_O

Bạn có thể nhận được xếp hạng sao bằng cách sao chép các thuộc tính CSS cho các div.star-holder .star-ratingbộ chọn và phục vụ các thuộc tính từ biểu định kiểu plugin. Hãy chắc chắn rằng bạn sao chép hình nền xếp hạng sao quá. Sau đó, khi bạn cạo <div class="star-rating" style="width:??px"></div>phần tử, thuộc tính css của bạn sẽ xuất ra màn hình các ngôi sao (bất kể xếp hạng của chúng) vì nó được điều khiển bởi chiều rộng của div. Dễ như ăn bánh.
Adam

Hơn nữa, để phân biệt các ngôi sao, chỉ cần thay đổi màu sắc của chúng trong Photoshop để nó không phải là sự lột xác trực tiếp của màu xanh WordPress hoặc thay vào đó nếu bạn muốn khéo léo về nó, hãy tạo một loạt các biến thể màu mà người dùng của bạn có thể chọn để phù hợp với thẩm mỹ của trang web của họ. Tôi sử dụng SimpleHTMLDom Parser rất nhiều, trong trường hợp không có API tồn tại, cũng không cho phép nói nguồn cấp RSS (nếu đó là mục tiêu của tôi). Nó hiệu quả như thực tế, được cho rằng nếu có bất cứ điều gì thay đổi, bạn sẽ cần cập nhật mã của mình để phản ánh điều đó. Nhưng trong trường hợp không có quyền truy cập thực sự vào API, nó có thể cung cấp cho bạn quyền truy cập vào nội dung.
Adam

Câu trả lời:


5

Các plugin ưa thích đã được thêm vào API WordPress.org. Có một tính năng mới trong 3.5 cho phép bạn truy cập vào mục yêu thích của mình từ trình cài đặt plugin.

Xem http://core.trac.wordpress.org/ticket/22002 để biết thông tin về cách sử dụng nó trong lõi.

API cho phép bạn truy xuất một đối tượng có chứa từng plugin

  • Tên
  • sự miêu tả
  • tác giả
  • Xếp hạng
  • ngày cập nhật mới nhất
  • thay đổi nhật ký
  • phiên bản ổn định
  • hoạt động với phiên bản wp

Để lấy lại đối tượng

Gọi cho http://api.wordpress.org/plugins/info/1.0/ bằng cách sử dụng wp_remote_post chuyển một mảng các đối số bao gồm hành động sẽ là 'query_plugins' và tên người dùng wp dot org để lấy các mục yêu thích từ đó.

$request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );

Trước khi bạn có một đối tượng sạch đẹp, bạn cần thực hiện một số xử lý lỗi và phân tích cú pháp khác. Dưới đây là một chức năng ví dụ sẽ trả về một đối tượng sạch đẹp chứa tất cả các chi tiết plugin.

function api( $action, $args ) {
        if ( is_array( $args ) )
            $args = (object) $args;

        $request = wp_remote_post('http://api.wordpress.org/plugins/info/1.0/', array( 'timeout' => 15, 'body' => array('action' => $action, 'request' => serialize($args))) );
        if ( is_wp_error($request) ) {
            $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), $request->get_error_message() );
        } else {
            $res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
            if ( ! is_object( $res ) && ! is_array( $res ) )
                $res = new WP_Error('plugins_api_failed', __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server&#8217;s configuration. If you continue to have problems, please try the <a href="http://wordpress.org/support/">support forums</a>.' ), wp_remote_retrieve_body( $request ) );
        }

        return apply_filters( 'c3m_favorite_results', $res, $action, $args );
    }

Sử dụng

Việc sử dụng ví dụ này sẽ cung cấp cho bạn một danh sách các plugin yêu thích không có thứ tự cùng với liên kết đến plugin trên dot org, liên kết đến uri của tác giả và xếp hạng sao.

$api_data = api( 'query_plugins', array( 'user' => 'my_dot_org_username' ) );
$api_plugins = $api_data->plugins;

echo '<ul class="c3m-favorites">';
        foreach( $api_plugins as $plugin ) {

            $name = $plugin->name; ?>
            <li><strong><a target="_blank" href="http://wordpress.org/extend/plugins/<?php echo $plugin->slug ?>/"><?php echo esc_html( $name ); ?></a></strong><br>

                <div class="star-holder" title="<?php printf( _n( '(based on %s rating)', '(based on %s ratings)', $plugin->num_ratings ), number_format_i18n( $plugin->num_ratings ) ); ?>">
                <div class="star star-rating" style="width: <?php echo esc_attr( str_replace( ',', '.', $plugin->rating ) ); ?>px"></div></div>

                <em><?php _e('By: ') ?></em> <?php echo links_add_target( $plugin->author, '_blank' ). '<br>'; ?>
            </li><?php
        }
        echo '</ul>';

Kết quả

nhập mô tả hình ảnh ở đây

Ảnh chụp màn hình widget từ plugin Plugin yêu thích của tôi: http://wordpress.org/extend/plugins/favorite-plugins-widget/


4

Chưa.

Otto nói 'sớm' vào thứ Tư. Nhưng anh ấy đã đi đến BBQ vào cuối tuần này, vì vậy 'sớm' có lẽ là 'Tháng này'. ;)

Biên tập:

Otto42: @Ipstenu @EricMann Tôi có mã để làm điều đó, nhưng chưa được triển khai. Một số tranh luận về cách tốt nhất. Nó sẽ ở đó cuối cùng.


2
Hiểu ... BBQ luôn vượt qua WordPress.
Chris_O
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.